使用匹配并在sed脚本中不匹配

时间:2013-06-03 11:00:27

标签: sed match

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

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

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

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

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

如何将这两者合二为一?

UPD:我现在已经接受了答案,但我想知道为什么

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

不起作用

2 个答案:

答案 0 :(得分:2)

使用grep删除“map:200”行,然后发送到sed:

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

答案 1 :(得分:2)

这可能适合你(GNU sed):

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