sed无法从UTF范围正确删除字符

时间:2019-11-04 19:51:16

标签: linux sed utf-8

我想从俄语和阿拉伯字母(“ |”)之外的所有字符中清除文件和空格标记。让我们以阿拉伯字母开头。所以我有:

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

我尝试过[\ u0621- \ u064A]-相同。 我也尝试使用{Arabic},但它根本无法正确清除文件。

错误对我来说有点奇怪。显然是064FF> 0621。

所以,总的来说,我想要这样的东西:

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

我对awk或任何其他实用程序都还可以,但是据我所知sed稳定可靠。

1 个答案:

答案 0 :(得分:3)

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流。

您还可以使用Unicode属性:

s/\P{Cyrillic}//g