我很沮丧 grep 在我的 UTF-16 文档中找不到像“hello”这样的词。
任何人都可以推荐一个尝试猜测文件编码然后正确处理它的 grep 版本吗?
我很沮丧 grep 在我的 UTF-16 文档中找不到像“hello”这样的词。
任何人都可以推荐一个尝试猜测文件编码然后正确处理它的 grep 版本吗?
你肯定想看看ack
。
它支持 Unicode 编码,基本上是 grep,但更好。
如果您在 Linux、Unix 等系统下,您可能希望将 LANG 变量更改为编码以匹配您的文档。
首先检查您的语言环境。这是我在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
Perl 有一种比 grep 更好的正则表达式语法(更强大),它支持 UTF8 和 UTF16,但我不确定它在猜测编码方面有多好......不过,如果你告诉它使用哪种编码,它可以毫无问题地读取这些文件并在它们上运行正则表达式。为此,您必须自己编写一个小型 Perl 程序(可以说是您自己在 Perl 中实现的 micro-grep 实现),但这并不难。Perl 适用于所有主要操作系统。
我很沮丧 grep 在我的 UTF-16 文档中找不到像“hello”这样的词。
任何人都可以推荐一个尝试猜测文件编码然后正确处理它的 grep 版本吗?
ugrep是免费的 BSD-3 开源,支持所有 UTF 编码,并通过支持 GNU/BSD grep 命令行选项声称是 grep 的真正替代品。同样,ripgrep、ack 和 silver searcher (ag) 也支持 UTF 编码,但不是 grep 的直接替代品,因为它们的行为和选项与 grep 不同。
您可以iconv
结合使用过滤器实用程序grep
将 UTF-16 文件转换为 UTF-8,但您必须明确指定输入和输出编码,例如:
iconv -f utf-16 -t utf8` < file.txt | grep 模式