2012-02-15 75 views
1

我想在文件層次結構中搜索指定編碼系統(cp1251/UTF-8/UTF-16-le/iso-8859-4等)中的文本。在文件層次結構中搜索選定編碼系統中的文本

例如我已經在CP1251編碼的源代碼和我運行的Debian與系統編碼UTF-8grep或Midnight Commander以UTF-8編碼執行搜索。所以我找不到俄語的單詞。

首選解決方案將使用標準POSIX或GNU命令行工具(如grep)。

MC或Emacs解決方案也讚賞。

我想:

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

,但該命令有時不顯示結果。

+0

我不知道我是否理解你。你能否描述一下這個命令會發生什麼,以及你希望發生什麼。 – 2012-02-15 10:09:17

+0

例如,我有** cp1251 **編碼的源代碼,並運行帶有系統編碼** UTF-8 **的Debian。當我在Midnight Commander中執行搜索時,它僅使用系統編碼... – gavenkoa 2012-02-15 12:22:10

回答

0

從命令行:

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

這不起作用。如果配置終端配置爲使用** UTF-8 **,則它會將「Привет」傳遞爲** UTF-8 **,並且grep不會執行將搜索模式重新編碼爲** cp1251 **。所以不要在UTF-8中搜索cp1251 grep perfrm搜索。 – gavenkoa 2012-02-19 19:21:32

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。

相關問題