正则表达式删除一行
Regex to delete a line
我有以下模式:
"gear_size"=>"small",
"gear_size"=>"medium",
"name"=>"node.cip4pc.cisco.com",
"region_name"=>"CCS",
"gear_size"=>"large",
node.cip4pc.cisco.com:10.203.24.175,
我需要删除行 "gear_size"=>"small"
和 "gear_size"=>"large"
。
这两行没有"name"=> 遵循模式。
所以,基本上我需要删除 "gear_size" 行,"name" 后面没有。
我检查了命令 pcregrep 是否有效,但不支持此命令。
解决此问题的任何帮助都会很棒。
谢谢。
你可以使用这个 awk:
awk 'p && /name/{print p} {p=""} /gear_size/{p=[=10=]; next} 1' file
"gear_size"=>"medium",
"name"=>"node.cip4pc.cisco.com",
"region_name"=>"CCS",
node.cip4pc.cisco.com:10.203.24.175,
编辑:如果您需要名称直接跟在
之后,这是一个更好的解决方案
sed '/^"gear_size"/{N;/\n"name"=>/!D}'
如果行匹配 /^"gear_size"/
,而下一行不匹配 /^"name"=>/
,则删除它。
原文: gear_size
和 name
之间分离的可怕解决方案
sed '/gear_size/{h;d};/name/{x;/^$/!{p;s/.*//};x}' file
输出:
"gear_size"=>"medium",
"name"=>"node.cip4pc.cisco.com",
"region_name"=>"CCS",
node.cip4pc.cisco.com:10.203.24.175,
解释:
用匹配 /gear_size/
的任何行替换 hold space 并删除该行(移至下一行而不打印)。
如果行匹配 /name/
,则将行与保留 space 交换。如果 hold space 不为空,打印它包含的内容并清空它。换回来。
那么默认打印patternspace的内容
我有以下模式:
"gear_size"=>"small",
"gear_size"=>"medium",
"name"=>"node.cip4pc.cisco.com",
"region_name"=>"CCS",
"gear_size"=>"large",
node.cip4pc.cisco.com:10.203.24.175,
我需要删除行 "gear_size"=>"small"
和 "gear_size"=>"large"
。
这两行没有"name"=> 遵循模式。
所以,基本上我需要删除 "gear_size" 行,"name" 后面没有。
我检查了命令 pcregrep 是否有效,但不支持此命令。
解决此问题的任何帮助都会很棒。
谢谢。
你可以使用这个 awk:
awk 'p && /name/{print p} {p=""} /gear_size/{p=[=10=]; next} 1' file
"gear_size"=>"medium",
"name"=>"node.cip4pc.cisco.com",
"region_name"=>"CCS",
node.cip4pc.cisco.com:10.203.24.175,
编辑:如果您需要名称直接跟在
之后,这是一个更好的解决方案sed '/^"gear_size"/{N;/\n"name"=>/!D}'
如果行匹配 /^"gear_size"/
,而下一行不匹配 /^"name"=>/
,则删除它。
原文: gear_size
和 name
sed '/gear_size/{h;d};/name/{x;/^$/!{p;s/.*//};x}' file
输出:
"gear_size"=>"medium",
"name"=>"node.cip4pc.cisco.com",
"region_name"=>"CCS",
node.cip4pc.cisco.com:10.203.24.175,
解释:
用匹配 /gear_size/
的任何行替换 hold space 并删除该行(移至下一行而不打印)。
如果行匹配 /name/
,则将行与保留 space 交换。如果 hold space 不为空,打印它包含的内容并清空它。换回来。
那么默认打印patternspace的内容