(e) grep: акцентированные символы, не распознаваемые как часть слова - PullRequest
2 голосов
/ 13 февраля 2012

Я хотел бы использовать (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 Ответ

1 голос
/ 13 февраля 2012

Какие кодовые точки считаются символом класса слов, не зависит от локали в Юникоде, а 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

Я не могу не удивляться вашему выбору строк поиска. Спасибо за смешок.

...