13

I want to do this:

 findstr /s /c:some-symbol *

or the grep equivalent

 grep -R some-symbol *

but I need the utility to autodetect files encoded in UTF-16 (and friends) and search them appropriately. My files even have the byte-ordering mark FFEE in them so I'm not even looking for heroic autodetection.

Any suggestions?


I'm referring to Windows Vista and XP.

4

7 に答える 7

5

回避策は、UTF-16 を ASCII または ANSI に変換することです。

TYPE UTF-16.txt > ASCII.txt

次に、FINDSTR を使用できます。

FINDSTR object ASCII.txt
于 2012-09-04T15:58:25.197 に答える
4

提案をありがとう。Windows Vista と XP について言及していました。

無料のSysinternalsstrings.exeを使用して、この回避策も発見しました。

C:\> strings -s -b dir_tree_to_search | grep regexp 

Strings.exe見つかったすべての文字列を抽出し (バイナリからですが、テキスト ファイルでも問題なく動作します)、各結果の先頭にファイル名とコロンを追加するため、正規表現でそれを考慮します (またはパイプラインでカットまたは別のステップを使用します)。は-s、再帰的な抽出を行い-b、バナー メッセージを抑制するだけです。

grep最終的には、主力の検索ユーティリティ Gnu が Unicode 文字エンコーディングをネイティブに処理しfindstrないことに、いまだにちょっと驚いています。

于 2009-01-04T13:55:54.217 に答える
3

Windows では、find.exe も使用できます。

find /i /n "YourSearchString" *.*

唯一の問題は、これがファイル名の後に一致を出力することです。findstr にパイプすることでそれらをフィルタリングできます

find /i /n "YourSearchString" *.* | findstr /i "YourSearchString"
于 2011-07-21T20:31:56.060 に答える
3
findstr /s /c:some-symbol *

次の文字エンコーディング対応コマンドに置き換えることができます。

for /r %f in (*) do @find /i /n "some-symbol" "%f"
于 2013-01-09T19:23:45.013 に答える
1

Damon Cortesi によるこのブログ記事によると、grep は UTF-16 ファイルでは機能しません。ただし、次の回避策があります。

for f in `find . -type f | xargs -I {} file {} | grep UTF-16 | cut -f1 -d\:`
        do iconv -f UTF-16 -t UTF-8 $f | grep -iH --label=$f ${GREP_FOR}
done

これは明らかに Unix 向けであり、Windows での同等物が何であるかはわかりません。この記事の著者は、上記のことを行うためのシェル スクリプトも提供しています

これは、UTF-16 のファイルのみを grep します。また、通常の方法で ASCII ファイルを grep します。

于 2009-01-02T22:22:45.943 に答える
0

どのプラットフォームでこれを行いたいかは言いませんでした。

Windows では、バイト オーダー マークで始まる Unicode ファイルを自動的に検出するPowerGREPを使用できます。(BOM のないファイルを自動検出するオプションもあります。自動検出は UTF-8 では非常に信頼性が高く、UTF-16 では制限されます。)

于 2009-01-03T14:50:27.477 に答える