0

我需要从日志文件中提取某些 json 数据(具有 datalist 成员),但只有 map 值不是 200。

现在我有两个 sed 脚本,一个从日志文件中提取 json 数据:

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

如果 map 字段的值为 200,则另一个跳过数据:

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

如何将这两者合二为一?

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 回答