在文件层次结构中的选定编码系统中搜索文本

时间:2012-02-15 08:44:48

标签: emacs internationalization full-text-search grep posix

我想在文件层次结构中搜索指定编码系统(cp1251 / UTF-8 / UTF-16-le / iso-8859-4等)中的文本。

例如,我有 cp1251 编码的源代码,我使用系统编码 UTF-8 运行Debian。 grep 或Midnight Commander以UTF-8编码执行搜索。所以我找不到俄语单词。

首选解决方案将使用标准POSIX或GNU命令行实用程序(例如 grep )。

MC或Emacs解决方案也表示赞赏。

我试过了:

$ grep `echo Привет | iconv -f cp1251 -t utf-8` *

但此命令有时不会显示结果。

2 个答案:

答案 0 :(得分:2)

您建议的命令输出字符串Привет,然后将该输出的结果传递给iconv并将grep应用于iconv的结果。那不是你想要的。你想要的是这个:

find . -type f -printf "iconv -f cp1251 -t utf-8 '%p' | grep --label '%p' -H 'Привет'\n" | sh

这会将iconv,后跟grep应用于当前目录下的每个文件。

但请注意,这假设您的文件的所有都在CP1251中。如果只有某些,它将会失败。在这种情况下,您首先必须编写一个检测文件编码的程序,然后仅在必要时应用iconv。

答案 1 :(得分:0)

从命令行:

LANG=ru_RU.cp1251 grep Привет *