2

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

4

1 回答 1

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 位)字符的所有内容。


要保留除一些明确定义的字符之外的所有内容,请使用否定字符类:

sed 's/[^characters you want to keep]//g'

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

于 2012-09-08T09:59:14.297 回答