Text-Processing

刪除以出現在另一個模式之後的任何地方的模式開始的整行

  • September 14, 2018

如何---在包含# Match(任何行號中的第一個出現)的行之後刪除以出現在任何行號中的任何行?


編輯:

#Match與開頭的行之間的關係---是,後者可以存在於之前或之後,#Match但只有存在於之後才應將其刪除#Match。–

樣本輸入

hello

this is sample
--- sdafasdf
adsafasf
asfas
fasf

#Match
this is sample
adsafasf
asfas    dafasf
------ lots of fun
---- test

adsfasf****

預期產出

hello

this is sample
--- sdafasdf
adsafasf
asfas
fasf

#Match
this is sample
adsafasf
asfas    dafasf

adsfasf****

根據您的問題,我剛剛創建了這個 text.txt。如果您的文件內容不同,請告訴我們。

bash-4.1$ cat test.txt
#Match
---- test
hello
#Match
this is sample
adsafasf
asfas
fasf
#Match
------ funny
------ lots of fun
#Match
dafasf
adsfasf

bash-4.1$ awk '/#Match/ {flag=1} flag && /^---/ {flag=0;next} 1' test.txt
#Match
hello
#Match
this is sample
adsafasf
asfas
fasf
#Match
------ lots of fun
#Match
dafasf
adsfasf

使用sed

sed -e '/#Match/ {n; /^---/d; }' infile

n命令正在將下一行輸入讀入模式空間,如果該行僅在上一行與 匹配時以/^---/d開頭,則刪除該行。---``#Match

回答修改後的問題

sed -e '/#Match/,$ { /^---/d; }' infile

引用自:https://unix.stackexchange.com/questions/468940