grep出力から非常に長いテキスト行を持つファイルを除外します


18

私は頻繁にgrepコマンドを実行してコード内の項目を見つけますが、Webプロジェクトの問題は、1行の巨大なテキスト行を作成する圧縮されたJavaScriptファイルとCSSファイルがあることが多いため、一致が見つかった場合、ターミナルウィンドウ全体が1000行を超えて入力されているため、探しているものを見つけるのは非常に非現実的です。

だから、200文字以上のテキストの単一行と言っているファイルを避ける方法はありますか?

回答:


20

GNU grepおよびxargsの場合:

grep -rLZE '.{200}' . | xargs -r0 grep pattern

または、grepの出力をカットできます。

grep -r pattern . | cut -c1-"$COLUMNS"

または、サポートしている場合はテキストを折り返さないように端末に指示します。

tput rmam
grep -r pattern .

または使用する less -S

grep -r pattern . | less -S

3
最初の例の正規表現を使用すると、反転一致でgrepにパイプすること... | grep -v -E '.{200}'もできます。たとえば、現在のディレクトリの下に* .jsファイルのすべての行があり、「。name」が200文字以下である場合: find . -name "*.js" -exec grep -H \\.name {} \; | grep -v -E '.{200}'
ゲイリーS.ウィーバー

3

オプション1: 特定のパターンに一致するファイルを除外できます。

grep --exclude='*.min.*'

これは除外されますscript.min.jsstyle.min.css...その他のgrepオプションが含ま--exclude-from=FILE--exclude-dir=DIR

オプション2: これが実用的かどうかはcutわかりませんが、各行の最初の200文字を入力してから、次のgrepように入力できます。

grep -H [OPTIONS] PATTERN [FILE...] | cut -c1-200 | grep PATTERN

1つ目grepは最初の一致を行い、ファイル名と行を出力します。2つ目PATTERNcut、行を指定した後もファイルがまだ存在することを確認します。


2

この種の状況では、近所のコンテキスト(30文字としましょう)でパターンをgrepするのが好きです:

grep -Po '.{0,30}pattern.{0,30}' *.js
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.