我在macosx上使用TextEdit创建了两个文件,相同的内容有不同的编码,然后
grep xxx filename_UTF-16
没有
grep xxx filename_UTF-8
XXXXXXX xxxxxxyyyyyy
grep did not support UTF-16?
答案 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 搜索文本文件和二进制文件,并为十六进制匹配生成十六进制转储。