2012-02-13 2 views
2

Я хотел бы использовать (e) grep для соответствия целому слову с помощью переключателя -w. Я установил локаль, но акцентированные символы рассматриваются в качестве границ слова, как в этом примере:(e) grep: акцентированные символы не распознаются как часть слова

$ 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

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

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

+0

Я понятия не имел, что означают образцы слов. Я просил друга. Кажется, что perl - единственный способ пойти, когда дело доходит до utf8. –