一个编码精明的grep替换?

时间:2009-03-05 00:11:43

标签: character-encoding grep

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

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

3 个答案:

答案 0 :(得分:6)

ack as perl-based grep replacement?

你肯定想看看ack

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

尝试使用grep

匹配的Unicode语言环境

如果您使用的是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版本 编码,然后正确处理?

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

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

    iconv -f utf-16 -t utf8`