Как сопоставить символы cjk с sed? - PullRequest
1 голос
/ 17 июня 2019

Я бы хотел соответствовать символам CJK. Но следующее регулярное выражение [[:alpha:]]\+ не работает. Кто-нибудь знает, чтобы соответствовать символам CJK?

$ echo '程 a b' | sed -e 's/\([[:alpha:]]\+\)/x\1/g'
程 xa xb

Желаемый результат - x程 a b.

Ответы [ 2 ]

2 голосов
/ 17 июня 2019

Как подсказывает @ WiktorStribiżew, будет проще использовать .
Если вы предпочитаете Perl, попробуйте следующее:

echo "程 a b" | perl -CIO -pe 's/([\p{Script_Extensions=Han}])/x\1/g'

Вывод:

x程 a b
0 голосов
/ 26 июня 2019

С Perl ваше решение будет выглядеть как

perl -CSD -Mutf8 -pe 's/\p{Han}+/x$&/g' filename

Или, с более старыми версиями Perl до 5.20, используйте группу захвата:

perl -CSD -Mutf8 -pe 's/(\p{Han}+)/x$1/g' filename

Чтобы изменить содержимое файла, добавьте -i параметр:

perl -i -CSD -Mutf8 -pe 's/(\p{Han}+)/x$1/g' filename

ПРИМЕЧАНИЯ

  • \p{Han} соответствует одному китайскому символу, \{Han}+ соответствует фрагментам из 1 или более китайских символов
  • $1 - это обратная ссылка на значение, захваченное с помощью (\p{Han}+), $& заменяется значением полного совпадения
  • -Mutf8 позволяет Perl распознавать символы в кодировке UTF8, используемые непосредственно в вашем коде Perl
  • -CSD (эквивалентно -CIOED) позволяет декодировать входные данные и перекодировать выходные данные (это будет работать для кодирования UTF8).
...