在Unix中搜索特定的非ASCII字符

时间:2014-12-22 08:52:31

标签: bash shell unix

是否可以在unix中的文件中搜索非ASCII字符集�

我想在bash中搜索所有这些字符,用两个空格替换它们。

sed -i 's/[�]/\ \ /g' filename最后工作了

2 个答案:

答案 0 :(得分:1)

搜索这些字符的方式取决于文件中的编码。如果文件采用UTF-8编码,则可以设置UTF-8语言环境,并简单地将它们与shell匹配。假设GNU sed(Linux上的默认设置),命令行将如下所示:

LANG=C.UTF-8 sed -i 's/[�]/  /g' filename

要使其正常工作,您必须使用符合UTF-8标准的shell,例如echo 'ï' | wc -c输出3(两个UTF-8代码单元加上换行符)。

答案 1 :(得分:1)

您似乎正在使用Latin-1工具查看UTF-8数据。因此,您的问题基本上是不明确的,但假设您要查找包含UTF-8替换字符的文件,请尝试类似

的内容
perl -CSD -nle 'if m/^\x{FFFD}/ { print $ARGV; close() }' files ...

以下是我用来理解你问题的内容:

$ echo -n '�' | iconv -t iso-8859-1 | xxd
0000000: efbf bd                          

Google搜索efbfbd迅速将http://www.fileformat.info/info/unicode/char/0fffd/index.htm提升为热门点击。

另请注意,U + FFFD基本上是错误代码。你应该找到并替换它。你应该找出哪个先前的编码步骤失败并产生了这个,然后修改它。