10

我很沮丧 grep 在我的 UTF-16 文档中找不到像“hello”这样的词。

任何人都可以推荐一个尝试猜测文件编码然后正确处理它的 grep 版本吗?

4

3 回答 3

6

ack 作为基于 perl 的 grep 替代品?

你肯定想看看ack

它支持 Unicode 编码,基本上是 grep,但更好。

尝试使用 grep 匹配的 Unicode 语言环境

如果您在 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
于 2009-03-05T03:16:54.063 回答
2

Perl 有一种比 grep 更好的正则表达式语法(更强大),它支持 UTF8 和 UTF16,但我不确定它在猜测编码方面有多好......不过,如果你告诉它使用哪种编码,它可以毫无问题地读取这些文件并在它们上运行正则表达式。为此,您必须自己编写一个小型 Perl 程序(可以说是您自己在 Perl 中实现的 micro-grep 实现),但这并不难。Perl 适用于所有主要操作系统。

于 2009-03-05T00:26:49.727 回答
0

我很沮丧 grep 在我的 UTF-16 文档中找不到像“hello”这样的词。

任何人都可以推荐一个尝试猜测文件编码然后正确处理它的 grep 版本吗?

  1. ugrep是免费的 BSD-3 开源,支持所有 UTF 编码,并通过支持 GNU/BSD grep 命令行选项声称是 grep 的真正替代品。同样,ripgrep、ack 和 silver searcher (ag) 也支持 UTF 编码,但不是 grep 的直接替代品,因为它们的行为和选项与 grep 不同。

  2. 您可以iconv结合使用过滤器实用程序grep将 UTF-16 文件转换为 UTF-8,但您必须明确指定输入和输出编码,例如:

    iconv -f utf-16 -t utf8` < file.txt | grep 模式

于 2020-04-16T14:26:54.233 回答