我很沮丧,grep在我的UTF-16文档中找不到像“你好”这样的词。
有人可以推荐一个试图猜测文件编码然后正确处理它的grep版本吗?
答案 0 :(得分:6)
你肯定想看看ack
。
它支持Unicode编码,基本上是grep,但更好。
如果您使用的是Linux,Unix等,则可能需要将LANG envariable更改为与您的文档匹配的编码。
首先检查您的区域设置。以下是我的 MacBook Pro 默认设置为:
$ locale
LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL=
说,在bash下:
$ LANG="foo" grep 'gotta be found now' file.name
更持久的东西(小心):
$ export LANG="foo"
$ grep 'bar' mitz.vah
答案 1 :(得分:2)
Perl有一种比grep更强大的正则表达式语法(更强大),它有UTF8和UTF16支持,但我不确定猜测编码有多好...如果你告诉它使用哪种编码但是,它可以毫无问题地读取这些文件并对它们运行正则表达式。你必须为自己编写一个小的Perl程序(你自己在Perl中使用micro-grep实现),但这并不难。 Perl适用于所有主要操作系统。
答案 2 :(得分:0)
我对grep无法在我的系统中找到类似“ hello”的词感到沮丧 UTF-16文件。
任何人都可以推荐尝试猜测文件的grep版本 编码,然后正确处理?
ugrep是免费的BSD-3开源软件,支持所有UTF编码,并声称通过支持GNU / BSD grep命令行选项真正替代了grep。同样,ripgrep,ack和silver搜索器(ag)也支持UTF编码,但不是grep的直接替代品,因为它们的行为和选项与grep不同。
您可以结合使用iconv
过滤器实用工具和grep
将UTF-16文件转换为UTF-8,但必须显式指定输入和输出编码,例如喜欢:
iconv -f utf-16 -t utf8`