2012-02-15 14 views
1

ファイル階層内の指定されたコーディングシステム(cp1251/UTF-8/UTF-16-le/iso-8859-4など)のテキストを検索したいとします。ファイル階層の選択されたコーディングシステムのテキストを検索

例えばIはCP1251符号化におけるソースコードを持っていると私はUTF-8コーディングシステムではDebianを実行します。 grepまたはMidnight CommanderがUTF-8コーディングで検索を実行します。だから私はロシア語を見つけることができません。

標準的なPOSIXまたはGNUコマンドラインユーティリティ(grepなど)を使用することをお勧めします。

MCまたはEmacsソリューションも高く評価されています。

は、私が試した:

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

しかし、このコマンドは時々結果は表示されません。コマンドラインから

+0

私はあなたを理解しているかわかりません。あなたはそのコマンドで何が起きているのか、何が起こりたいのかを教えてください。 –

+0

たとえば、** cp1251 **コーディングにソースコードがあり、** UTF-8 **をコーディングしたシステムでDebianを実行します。 Midnight Commanderで検索を実行すると、システムコーディングのみが使用されます。 – gavenkoa

答えて

0

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

これは機能しません。 ** UTF-8 **を使用するように設定されている場合、** UTF-8 **として "Привет"を渡し、grepは** cp1251 **への記録検索パターンを実行しません。代わりにUTF-8でcp1251 grep perfrm検索を検索するのではなく、 – gavenkoa

2

あなたが提案したコマンドがПриветが、その後、パイプその出力結果は、iconvがとiconvの結果にはgrepを適用する文字列を出力します。それはあなたが望むものではありません。これは次のとおりです。

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

これは、現在のディレクトリ以下のすべてのファイルにiconvの後にgrepが適用されます。

ただし、ファイルのすべてがCP1251にあることに注意してください。 のうちのどれかがの場合には失敗します。その場合は、最初にがファイルのエンコーディングであるを検出し、必要な場合にのみiconvを適用するプログラムを作成する必要があります。

関連する問題