我想使用(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
答案 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
我不禁对您选择的搜索字符串感到好笑。谢谢你的笑声。