2

我想使用 (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

4

1 回答 1

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

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

于 2012-02-13T14:05:05.290 回答