rulebook 发表于 2013-11-01 16:58

在bash正则时遇到的问题

egrep -o [^\x00-\xff]+ p
上面的正则可以匹配到中文和符号

egrep -o [^\x00-\xff]+ p | egrep -o "\w+"
无法匹配到中文

egrep -o [^\x00-\xff]+ p | egrep -w "\w+"
可以匹配到中文

这是为什么?
因为不理解希望可以得到帮助。

不要光贴一堆man消息,或者发表一些扯淡信息,或者连问题都没看懂就知道装大爷的人也别来了,谢谢你们。

真心愿意帮忙的我在这里谢谢了。
:dizzy: :dizzy:

Shell_HAT 发表于 2013-11-01 17:19

你把第二条命令改成这样试试export LC_ALL=en_US.UTF-8; egrep -o [^\x00-\xff]+ p | egrep -o "\w+"

rulebook 发表于 2013-11-01 17:23

先谢谢你。
按你的改过之后结果可以匹配到下划线。但是匹配依旧不到中文。
最开始连下划线都无法匹配到。

但是改过后第三天也只能匹配下划线了,我不明白这是为什么?

Shell_HAT 发表于 2013-11-04 13:48

回复 3# rulebook


    能否把你的测试数据贴出来看看

rulebook 发表于 2013-11-05 09:52

上面描述有点乱七八糟了。从这里看吧。
现在改完编码后情况是这样的。p里是文件内容

# cat p
中文asdasdasd
fewg啊sad
abc
阿姨哦
llllllllaaaalllll
124151
.,;'.-=_

# egrep -o [^\x00-\xff]+ p
中文

阿姨哦
.,;'.-=_

-w这句原本是可以只匹配中文的,现在无法将符号剔除出去了。
# egrep -o [^\x00-\xff]+ p | egrep -w "\w+"
中文

阿姨哦
.,;'.-=_

原本-o这句是什么也匹配不到得,现在改完编码可以匹配到一个下划线。
# egrep -o [^\x00-\xff]+ p | egrep -o "\w+"
_


------------------------------------------------------------------------------------------
最开始的情况:
# egrep -o [^\x00-\xff]+ p
中文

阿姨哦
.,;'.-=_

# egrep -o [^\x00-\xff]+ p | egrep -w "\w+"
中文

阿姨哦

# egrep -o [^\x00-\xff]+ p | egrep -o "\w+"

:dizzy:

Shell_HAT 发表于 2013-11-07 17:40

本帖最后由 Shell_HAT 于 2013-11-07 17:45 编辑

-w这句原本是可以只匹配中文的,现在无法将符号剔除出去了。
# egrep -o [^\x00-\xff]+ p | egrep -w "\w+"
中文

阿姨哦
.,;'.-=_

用这个命令测试正常:
# LC_ALL=C egrep -o [^\x00-\xff]+ p | egrep -w "\w+"
中文

阿姨哦


还有这个:
# LC_ALL=C egrep -o [^\x00-\xff]+ p | LC_ALL=en_US.UTF-8 egrep -w "\w+"
中文

阿姨哦

rulebook 发表于 2013-11-08 14:58

是的,在没有改LC_ALL=en_US.UTF-8这个之前
egrep -o [^\x00-\xff]+ p | egrep -w "\w+"这个确实是可以正确将中文晒出来的。

我的问题是 : 为什么会这样呢。

-o 是显示匹配的内容, -w 是精确匹配。

为何-o的只显示匹配内容没有将其晒出来
而-w精确匹配可以。

请问是跟字符编码有关系么?egrep在执行-o -w时有什么不同的地方么。

呵呵,谢谢你耐心的回答。

:handshake
页: [1]
查看完整版本: 在bash正则时遇到的问题