我有一个包含阿拉伯字符和其他一些字符的文本文件(标点符号,数字,英文字符......)。 如何告诉sed删除文件中的所有字符,除了阿拉伯语字符?简而言之,我可以说我们通常会告诉sed删除/替换某些特定字符并打印其他字符,但现在我正在寻找一种方法来告诉sed只打印我想要的字符,并删除所有其他字符。
答案 0 :(得分:2)
使用GNU sed,您应该能够通过十六进制代码指定字符。您可以在字符类中使用它们:
sed 's/[\x00-\x7F]//g' # hex notation
sed 's/[\o000-\o177]//g' # octal notation
您还应该能够使用tr
命令获得相同的效果:
tr -d '[\000-\177]'
两种方法都假定输入文件的UTF8编码。多字节字符的位设置最高,因此您可以简单地删除标准ASCII(7位)字符的所有内容。
要保留除了一些定义明确的字符以外的所有字符,请使用否定字符classe:
sed 's/[^characters you want to keep]//g'
使用类似[^…]\+
的模式可能会提高正则表达式的性能。