在我的 Linux 桌面上,我有一个 UTF-8 语言环境。当我尝试使用 grep (ack) 搜索一些 KOI8-R 编码的文件时,它失败了。如果我手动将模式编码为 KOI8-R 并将其作为参数传递,它就可以工作。
是否可以告诉 grep 该模式使用什么编码?或者还有其他工具吗?
答案1
如果您要搜索的所有文件都具有相同的编码:
LC_CTYPE=ru_RU.KOI8-R luit ack-grep "$(echo 'привет' | iconv -t KOI8-R)" *.txt
或者在 bash 或 zsh 中
LC_CTYPE=ru_RU.KOI8-R luit ack-grep "$(iconv -t KOI8-R <<<'привет')" *.txt
或者以所需的编码启动子 shell:
$ LC_CTYPE=ru_RU.KOI8-R luit
$ ack-grep 'привет' *.txt
$ exit
卢伊特(随 XFree86 和 X.org 一起提供)在设置指定的语言环境中运行在命令行上指定的程序LC_CTYPE
,假设使用 UTF-8 终端。因此该命令在所需的区域设置中运行,并且 Luit 将其终端输出转换为 UTF-8。
如果您的目录树包含许多采用不同编码的文件,另一种方法是在您首选的编码下安装该目录树的视图。我觉得熔丝文件系统可以做到这一点(未经测试)。
mkdir /utf8-view
fuseflt iconv-koi8r-utf8.conf /some/dir /utf8-view
ack-grep 'привет' /utf8-view/*.txt.utf8
fusermount -u /utf8-view
配置文件iconv-koi8r-utf8.conf
包含的位置
ext_in =
ext_out = *.utf8
flt_in =
flt_out = .utf8
flt_cmd = iconv -f KOI8-R -t UTF-8