(e)grep:未被识别为单词一部分的重音字符

时间:2012-02-13 12:10:11

标签: unicode utf-8 grep locale non-ascii-characters

我想使用(e)grep使用-w开关来匹配整个单词。我已经设置了区域设置,但重音字符被视为字边界,如下例所示:

$ locale
LANG=es_VE.utf8
LC_CTYPE="es_VE.utf8"
LC_NUMERIC="es_VE.utf8"
LC_TIME="es_VE.utf8"
LC_COLLATE="es_VE.utf8"
LC_MONETARY="es_VE.utf8"
LC_MESSAGES="es_VE.utf8"
LC_ALL=es_VE.utf8

$ echo -e "cáñamo\namo" | egrep -w amo
cáñamo
amo

如何在忽略amo

的同时找到cáñamo

1 个答案:

答案 0 :(得分:1)

哪些代码点计为字类字符在Unicode中不依赖于语言环境,LATIN SMALL LETTER N WITH TILDE始终是单词字符。

这是一个全UTF8工作流程,演示在单词边界之后和非(单词边界)之后搜索amo

 $ perl -Mutf8 -CSDA  -e 'print "cáñamo\namo\n"' | 
   perl -Mutf8 -CSDA -ne 'print if /\bamo\b/'
 amo

 $ perl -Mutf8 -CSDA  -e 'print "cáñamo\namo\n"' | 
   perl -Mutf8 -CSDA -ne 'print if /\Bamo\b/'
 cáñamo

我不禁对您选择的搜索字符串感到好笑。谢谢你的笑声。