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

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

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稳定可靠。

min_garden 回答:sed无法从UTF范围正确删除字符

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
本文链接:https://www.f2er.com/3164100.html

大家都在问