sed не удаляет символы из диапазона UTF должным образом - PullRequest
0 голосов
/ 04 ноября 2019

Я хочу очистить свой файл от всех символов, кроме русских и арабских букв, "|"и пробел. Начнем только с арабских букв. Итак, у меня есть:

cat file.tzt | sed 's/[^\u0600-\u06FF]//g'
sed: -e expression #1, char 21: Invalid range end.

Я пробовал [\ u0621- \ u064A] - то же самое. Я также пытался использовать {арабский}, но он вообще не очищает файлы.

Ошибка выглядит странно для меня. Очевидно, 064FF> 0621.

Итак, в целом я хочу получить что-то вроде этого:

cat file.tzt | sed 's/[^\u0600-\u06FFа-яА-Я |]//g'

И я в порядке с awk или любой другой утилитой, но, как я знаю, sed стабилени надежный.

1 Ответ

3 голосов
/ 04 ноября 2019

Perl понимает UTF-8:

perl -CSD -pe 's/[^\N{U+0600}-\N{U+06FF}]//g' -- file.txt
  • -C витков поддержки UTF-8, S означает для stdin / stdout / stderr, D означает для любого i /o streams.

Вы также можете использовать свойства Unicode:

s/\P{Cyrillic}//g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...