簡體   English   中英

SED:刪除包含第一個模式而不包含第二個模式的行

[英]SED: delete lines containing first pattern and not containing second pattern

我有這樣的文件內容:

a1 b1
a2 b2
a2 b21
a2 b22
a3 b3
a4 b4

我需要刪除包含a2而不包含b2的sed行。 即得到以下結果:

a1 b1
a2 b2
a3 b3
a4 b4

使用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跳過該行。

sed -n --posix -e '/a2/ !{
   p
   b
   }
/b2/ !p'

(根據Jotne +更正b而不是t )如果不包含a2,則打印,然后轉到下一行;如果包含,則打印,如果不包含b2,則打印

或更小

sed -n '/a2/ {/b2/ b
   }
p'

這可能對您有用(GNU sed):

sed '/\ba2\b/!b;/\bb2\b/!d' file 

要么:

sed '/\<a2\>/!b;/\<b2\>/!d' file

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM