非常に長い行がいくつかあるファイルがあります。ファイル内で複数回発生する可能性がある文字列をgrepしたい。
$ cat 2014-11-03.json | grep 218
これは判読できない出力を生成します。それが多すぎます。
$ cat 2014-11-03.json | grep -o 218
これはあまりにも削減します。一致するパターンのみが表示され、コンテキストはありません。
基本的に、次のような出力が必要です
... <category_id>218</category_id> ...
(はい、これはXMLですが、XMLを解析したくありません。一致した文字列をその両側に数文字で出力したいだけです。行全体ではなく数文字だけです。)
Grepには、一致した文字列、または完全な行のコンテキストでの一致した文字列(デフォルトの動作)、または一致した文字列のみを表示するオプションがあるようです前後の数行のコンテキストで文字列が表示されますが、前後の数文字のコンテキストで一致した文字列を表示するオプションが見つかりません。
$ cat 2014-11-03.json | tr ' ' '\n' | grep 218
これは理想的ではありません。問題のファイルにほぼ適切な場所にスペースがある限り、機能します。今回はうまくいきましたが、再びうまくいく保証はありません。
この質問は古いですが、行の一部だけをgrepする方法を探しているときにつまずいたので、ここに行きます:
回避策は、オプション「only-matching」を有効にしてから、RegExpの機能を使用してテキストよりも少し多くgrepを実行することです。
grep -o ".\{0,50\}WHAT_I_M_SEARCHING.\{0,50\}" ./filepath
もちろん、色の強調表示を使用している場合は、いつでもgrepを実行して、実際の一致のみに色を付けることができます。
grep -o ".\{0,50\}WHAT_I_M_SEARCHING.\{0,50\}" ./filepath | grep "WHAT_I_M_SEARCHING"
注意:
Jsonをきれいな形式で表示する方法は、pjsonを使用することです。フォーマット後、grepコマンドを追加できます。
$ echo '{"test1":"t1","test2":"t2"}' | pjson
{
"test1": "t1",
"test2": "t2"
}
pip
を使用してインストールします。
pip install pjson
次に、jsonコンテンツをpjson
にパイプします。