fis*_*ish 8 grep character-encoding
我很沮丧,grep在我的UTF-16文档中找不到像"你好"这样的词.
任何人都可以推荐一个试图猜测文件编码然后正确处理它的grep版本吗?
你肯定想看看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=
Run Code Online (Sandbox Code Playgroud)
说,在bash下:
$ LANG="foo" grep 'gotta be found now' file.name
Run Code Online (Sandbox Code Playgroud)
一些更永久的东西(小心这个):
$ export LANG="foo"
$ grep 'bar' mitz.vah
Run Code Online (Sandbox Code Playgroud)
Perl 有比 grep 更好的正则表达式语法(更强大),它支持 UTF8 和 UTF16,但我不确定它在猜测编码方面有多好......但是,如果你告诉它使用哪种编码,它可以毫无问题地读取这些文件并对其运行正则表达式。您必须为此编写一个小型 Perl 程序(可以说是您自己的 Perl 中的 micro-grep 实现),但这并不太难。Perl 适用于所有主要操作系统。