ドイツ語の有効なutf8シンボルが「�」に置き換えられる巨大なコードベース(主に2Gbコード)があります。
このコンテンツを含むすべてのファイルを確実に見つける方法はありますか? Visual Studio Codeは「時々」ファイルを探しますが、一貫していません。これはとても奇妙です。
grep -rnw . -e '�'
一部のバイナリファイルと.pngファイルでのみ見つかり、テキストファイル(.c、.h、.mなど)ではまったく見つかりません。
どんなアイデアがありますか?とても感謝しています!
答え1
答えは以下に基づいていなければなりません。
grep -axv '.*' file.txt
(再帰的) すべて検索ファイル名(-l
)に無効な文字が含まれています。以下を使用してください。 (
はい、ファイル名は必要ありません。)
grep -rlaxv '.*'
存在する
grep -axv '.*'
- -a grepでテキストの代わりにバイナリとして表示されるファイルを開きます。
-x
行全体を選択するために使用されます(次のオプションに必要です)。- 選択したコンテンツを反転させることです
-v
(一緒に動作します-x
)。 - 正規表現は
.*
何でも一致します。効果的な特徴。 inversion を使用すると、-v
コマンド全体が何でも含む完全な行と一致します。無効特徴。
ただし、有効かどうかの定義は、読んでいるファイルのエンコードによって異なることを理解してください。システムがデフォルトでUTF-8エンコーディングを使用している場合、このコマンドは無効なUTF-8シーケンスを検出します。他のエンコーディングを検出するには、ロケールを変更してください。
また、このコマンドの目的は、次を見つけることです。無効数値。実際の文字「�」を見つけることが目標である場合は、その文字を検索するだけです。
grep -oP '�' file
または、どの文字(bash、ksh、zsh)でも混乱を避けるために、一致するファイル名をリストします。
grep -rloP $'\Ufffd'
もちろんこれはできません。固定するファイルをリストするだけです。実際にファイルを修正するには(可能な場合)、問題の例を投稿してください。 2行または3行で十分です。