我需要从日志文件中提取某些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
不起作用
答案 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