我试图只删除字符串“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
答案 0 :(得分:1)
SED不了解JSON。 SED是面向行的编辑器/解析器。 JSON可以在一行,多行等上编写。无论您为JSON创建什么模式,它都不一致或可靠。
使用JQ解析JSON。然后你可以在JQ输出上使用sed,cut等工具。
答案 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
-i:就地(输出文件与输入相同)
-r:扩展正则表达式
-z:将文件视为一个字符串,而不是默认逐行显示
这可能会留下一些额外的换行符,但是很容易用附加的替换命令来替换它们。