0

ログ ファイルから特定の json データ (datalist メンバーを持つ) を抽出する必要がありますが、マップ値のみが 200 ではありません。

現在、2 つの sed スクリプトがあり、1 つはログ ファイルから json データを抽出します。

sed -n 's/.*\({\"datalist\".*}\).*/\1/p' full.log > new.log

マップ フィールドの値が 200 の場合、もう 1 つはデータをスキップします。

sed -n '/.*\"map\":\"200\".*/!p' new.log > map.log

これら2つを1つに結合する方法は?

UPD:今のところ回答を受け入れましたが、なぜだろうか

sed -n 's/.*\({\"datalist\".*\"map\":\"\(?!200\)\".*}\).*/\1/p' full.log > new.log

動作しません

4

2 に答える 2

2

sed に送信する前に、grep で「map:200」行を削除します。

grep -v "\"map\":\"200\"" full.log | sed -n 's/.*\({\"datalist\".*}\).*/\1/p' > new.log
于 2013-06-03T11:25:36.153 に答える
2

これはうまくいくかもしれません(GNU sed):

sed -n '/"map":"200"/!s/.*\({"datalist".*}\).*/\1/p' full.log > new.log
于 2013-06-03T12:18:58.317 に答える