web-dev-qa-db-ja.com

マッチの周囲の文字をgrep

巨大なデータベースダンプ内で検索と置換を実行しようとしていますが、発生するはずのことを実行していません。ファイル内のターゲット文字列をgrepしてから、周囲の8文字程度を確認したいと思います(状況によっては、その数を調整する必要がある場合があります)。どうやってやるの?

私が目を見張ることができない理由は、何千とは言わないまでも何百ものマッチがあるからです。文字列を囲むいくつかの文字を取得し、それをuniqまたは何かにパイプして、検索と置換で予期しない動作が発生する理由を確認します。

また、同じ行に複数の一致がある可能性があります!

8
user394

grepを使用する大雑把な方法は、次のようになります。

grep -o "....yourtext...." /path/to/the/dump.sql

ドットの数は、greppedテキストの前後の文字数に対応します。 -oオプションは、grepに、行全体ではなく、一致するものだけを出力させます。

出力でuniqを使用するには、最初に出力をソートする必要があることに注意してください。だから、通常、あなたはします

grep . . . | sort | uniq

各試合のヒット数に興味がある場合は、を使用してニースの出力を取得できます

grep . . . | sort | uniq -c | sort -n
12
rozcietrzewiacz

@rozcietrzewiaczの回答から始めて、私はに拡張することができます

pattern="string"
num=8
grep -on ".\{0,$num\}$pattern.\{0,$num\}" input-file
7
enzotib