如何删除包含(任何行号中第一次出现)---
的行之后的任何行号中出现的任何行?# 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****
答案1
根据你的问题,我刚刚创建了这个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
答案2
使用sed
:
sed -e '/#Match/ {n; /^---/d; }' infile
该n
命令将下一行输入读取到模式空间中,并/^---/d
删除该行(如果该行以 开头),且---
仅当上一行与 匹配时#Match
。
回答修改后的问题:
sed -e '/#Match/,$ { /^---/d; }' infile
答案3
怎么样
awk '/#Match/,EOF {if (/^---/) next} 1' file
从一行匹配开始#Match
,直到变量EOF
变为 true(这永远不会发生,因此 = 输入流的结尾),如果它在开头匹配三个(或更多)破折号,则跳过实际行。