首页 > 解决方案 > 如果下一行不包含文本,则删除行

问题描述

我有一个 json 文件并使用 jq 输出以下内容。

      "network": "8.8.8.8/32",
        "firewall",
      "network": "8.8.8.7/32",
      "network": "8.8.8.9/32",
        "firewall",
      "network": "8.8.8.10/24",
      "network": "8.8.8.11/32",
        "firewall",

我需要做的只是显示包含防火墙的网络。我想把它传给 sed 或 awk 来完成这个,但我运气不好。

所以基本上如果下面的行不包含防火墙,那么删除行。

预期产出

      "network": "8.8.8.8/32",
        "firewall",
      "network": "8.8.8.9/32",
        "firewall",
      "network": "8.8.8.11/32",
        "firewall",

我正在尝试但没有运气的一些东西

 cat file.json | jq '.items[].networks[] | {data:[{network:.network,devices:[.configs[].locations[].devices[] | select(.id | contains("firewall")).id]}]} | awk '/network/ {while (/network/ && getline>0) ; next} 1'

我是否必须将其传输到文件中以使其更容易?

标签: if-statementawk

解决方案


避免getline(),使用类似的东西

| awk '/network/ {n=$0} /firewall/ { printf("%s\n%s\n", n, $0)}'

推荐阅读