grep unicode 16支持

时间:2011-07-30 08:45:33

标签: linux unicode utf-8 grep utf-16

我在macosx上使用TextEdit创建了两个文件,相同的内容有不同的编码,然后

grep xxx filename_UTF-16

没有

grep xxx filename_UTF-8

XXXXXXX xxxxxxyyyyyy

grep did not support UTF-16?

5 个答案:

答案 0 :(得分:4)

iconv -f UTF-16 -t UTF-8 yourfile | grep xxx

答案 1 :(得分:2)

您可以尝试先转换为utf-8:

iconv -f utf-16 -t utf-8 filename | grep xxxxx

答案 2 :(得分:0)

使用ripgrep utility代替grep,它可以支持grepping UTF-16文件。安装者:brew install ripgrep

然后运行:

rg xxx filename_UTF-16
  

ripgrep支持以UTF-8以外的文本编码搜索文件,例如UTF-16,latin-1,GBK,EUC-JP,Shift_JIS等。 (提供了一些对自动检测UTF-16的支持。必须使用-E / --encoding flag.特别指定其他文本编码)

答案 3 :(得分:0)

定义以下Ruby的shell函数:

grep16() { ruby -e "puts File.open('$2', mode:'rb:BOM|UTF-16LE').readlines.grep(Regexp.new '$1'.encode(Encoding::UTF_16LE))"; }

然后将其用作:

grep16 xxx filename_UTF-16

请参阅:How to use Ruby's readlines.grep for UTF-16 files?

有关更多建议,请检查:grepping binary files and UTF16

答案 4 :(得分:0)

您还可以使用ugrep,它是grep的替代品,并向后兼容GNU / BSD grep,这意味着它与grep具有相同的选项,但提供了更多的功能,例如:

  

ugrep 在使用UTF BOM(字节顺序标记)时搜索UTF编码的输入   如果没有UTF BOM,则显示ASCII和UTF-8。选项   --encoding允许搜索许多其他文件格式,例如ISO-8859-1,EBCDIC和代码页437、850、858、1250至1258。

     

ugrep 默认情况下匹配Unicode模式(通过选项-U禁用)。   正则表达式语法符合POSIX ERE,扩展了   Unicode字符类,惰性量词和负模式   跳过不需要的模式匹配以产生更精确的结果。

     

ugrep 搜索文本文件和二进制文件,并为十六进制匹配生成十六进制转储。