テキストファイル(変数名など)で特定のコンテンツを見つけるために使用した「スキャン」という小さなスクリプトで生成されたコマンドがあります。
find "." \
| awk '{print "\""$0"\""}' \
| xargs grep -n --exclude-dir=.git "<iframe" \
| awk 'length($0) < 1000'
たとえば、ここではiframeオープンタグを検索するために使用しています。
最後の行は、長さが1000文字未満の行のみを考慮するように指示します。なぜなら、行の長さを持つファイルは通常バイナリファイルであるか、リンクされたJavaScriptであるため、一般的に興味がありません。 (長い行を見たい場合)
バイナリを除外するようにこれを修正するより良い方法はありますか?それとも、.mp4、.mp3、.swf、.jpg、.pngなどのように無視したいファイル形式を明示的に一覧表示する方が良いでしょうか?
ベストアンサー1
man grep
教えてください:
--binary-files=TYPE
ファイルの最初の数バイトがファイルにバイナリデータが含まれていることを示す場合、そのファイルはタイプタイプ
と見なされます。デフォルトでは TYPE は でありbinary
、 grep は通常バイナリが一致することを示す 1 行メッセージを出力するか、一致しないとメッセージを出力しません。 TYPEがある場合、grepは> binary filesがこのオプションwithout-match
と同じであると仮定します。-I
TYPEがある場合、text
grepはバイナリファイルをテキストのように扱います。これはこの-a
オプションと同じです。警告:grep --binary-files=text
バイナリガベージが出力される可能性があり、出力が端末用であり、端末ドライバがその一部をコマンドとして解釈する場合、重大な副作用が発生する可能性があります。
それでは、それは-I
あなたに効果があると思いますか? (grep
ファイルの前半にASCII以外の文字があると混乱を招く可能性があります。)
ああ、そもそもこの機能は必ずしも必要ではないようで、gawk
見つかったファイル名をヌルバイトで終了するオプションfind … -exec
と一緒に使う必要があるようです。-0