我有类似的文件内容:
a1 b1
a2 b2
a2 b21
a2 b22
a3 b3
a4 b4
我需要删除包含a2且不包含b2的sed行。即得到以下结果:
a1 b1
a2 b2
a3 b3
a4 b4
答案 0 :(得分:1)
使用awk
即可:
cat file
a1 b1
a2 b2
a2 b21
a2 b22
a3 b3
a4 b4
a2 c3
awk '$1=="a2" && $2!="b2" {next} 8'
a1 b1
a2 b2
a3 b3
a4 b4
如果字段#1为a2
且字段#2不是b2
,则跳过该行。
答案 1 :(得分:1)
sed -n --posix -e '/a2/ !{
p
b
}
/b2/ !p'
(根据Jotne +更正的评论b
而不是t
进行调整)
打印如果不包含a2然后转到下一行,如果包含,则打印如果不包含b2
或更小
sed -n '/a2/ {/b2/ b
}
p'
答案 2 :(得分:1)
这可能适合你(GNU sed):
sed '/\ba2\b/!b;/\bb2\b/!d' file
或:
sed '/\<a2\>/!b;/\<b2\>/!d' file