我想在文件层次结构中搜索指定编码系统(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` *
但此命令有时不会显示结果。
答案 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 Привет *