私のフォントがサポートしていない文字をTeXファイルで繰り返し検索するには、通常、壊れていないスペースとゼロのスペースを検索することから始めます。これはターミナルコマンドラインで生成するのが難しいため、UTF-8 16進表現を使用します。
env LANG=C grep -obUaP "\xc2\xa0" $(find -name '*.tex')
env LANG=C grep -obUaP "\xe2\x80\x8b" $(find -name '*.tex')
上記のLANG
ように環境変数を明示的に設定する必要があるのはなぜですか?C
env LANG=C
ノート
-U
andをすべて使用することは-a
間違っているように見えるかもしれませんが、このバージョンのマニュアル指摘
型が「バイナリ」の場合、grepは-z(--null-data)オプションがなくてもテキスト以外のバイトを行終端として扱うことができます。
-a
行終端を強制的に行終端に設定します(あまり明確ではありません)。
http://www.gnu.org/software/grep/manual/html_node/File-and-Directory-Selection.html
答え1
私のgrepマニュアルバージョンではこれを扱っていませんが、grep 3.0にはこのトピックの詳細があります。
警告:-a(--binary-files = text)オプションはバイナリゴミを出力できます。これは、出力が端末のものであり、端末ドライバがその一部をコマンドとして解釈する場合、重大な副作用がある可能性があります。一方、テキストエンコーディングが不明なファイルを読み取るときは、直接表示するのが安全ではない場合でも、より多くの一致を見つけるために-aを使用するか、環境で 'LC_ALL = 'C'を設定すると便利です。
この答えから:https://unix.stackexchange.com/a/87763/33386
C言語環境では、文字はシングルバイトで、文字セットはASCIIです[...]
これが不明なテキストファイルをスキャンするときに文字を表示するのに役立つ理由です。ASCII 文字セットを強制的に使用します。