如何判断sed“不要删除一些字符”?

时间:2012-09-08 09:42:02

标签: linux sed

我有一个包含阿拉伯字符和其他一些字符的文本文件(标点符号,数字,英文字符......)。 如何告诉sed删除文件中的所有字符,除了阿拉伯语字符?简而言之,我可以说我们通常会告诉sed删除/替换某些特定字符并打印其他字符,但现在我正在寻找一种方法来告诉sed只打印我想要的字符,并删除所有其他字符。

1 个答案:

答案 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'

使用类似[^…]\+的模式可能会提高正则表达式的性能。