sed命令删除特定字符串周围的花括号

时间:2018-02-08 22:04:44

标签: regex amazon-web-services sed

我试图只删除字符串“CidrIp”周围的花括号:“0.0.0.0/0” 任何人都可以帮忙吗?谢谢!

输入:

        {
            "FromPort": 1024,
            "ToPort": 65535,
            "IpProtocol": "udp",
            "CidrIp": "0.0.0.0/0",
            "CidrIp": "0.0.0.0/0"
            ]
        }

输出:

if

3 个答案:

答案 0 :(得分:1)

SED不了解JSON。 SED是面向行的编辑器/解析器。 JSON可以在一行,多行等上编写。无论您为JSON创建什么模式,它都不一致或可靠。

使用JQ解析JSON。然后你可以在JQ输出上使用sed,cut等工具。

JQ

答案 1 :(得分:0)

如果空白是可重复的,如果输入是有限的,如果你知道这是一个黑客而不是处理结构化数据的正确方法等:

sed '/{/{N;/Cidr/{N;s/[^\n]*\n//;s/\n.*//;s/ //;}}' input-file

  • /{/用于匹配开卷的行
    • N将下一行添加到模式空间
    • /Cidr/用于模式空间匹配" Cidr"
      • N获取下一行
      • s/[^\n]*\n//删除第一行
      • s/\n.*//删除最后一行
      • s/ //删除一些空格以取消缩进" Cidr"数据

如果真正的输入数据使用制表符,则可能需要修改最后一个空格。我的快速测试用空间结束了。

答案 2 :(得分:0)

sed -i -r -z "s,{([^{}]*CidrIp[^{}]*)},\1,g" input-file

regex101 demo

-i:就地(输出文件与输入相同)

-r:扩展正则表达式

-z:将文件视为一个字符串,而不是默认逐行显示

这可能会留下一些额外的换行符,但是很容易用附加的替换命令来替换它们。