Linux 您是否可以使用sed删除匹配项并仅删除后面的某些行?

Linux 您是否可以使用sed删除匹配项并仅删除后面的某些行?,linux,bash,sed,Linux,Bash,Sed,是否可以使用sed搜索特定的代码块并删除匹配项,并且仅删除匹配项后面的特定行 例如,如果我有一个这样的块,并且想要删除特殊标记1,并且只删除它后面的第二行: special marker 1 text 1 text 2 text 3 我是否可以使用sed搜索块的实例并得出: text 1 text 3 我知道以下命令: sed -i '/START/,/END/ {/special marker 1/{n;n;N;d;}}' filename; 但是,此命令只给我留下以下信息: text

是否可以使用sed搜索特定的代码块并删除匹配项,并且仅删除匹配项后面的特定行

例如,如果我有一个这样的块,并且想要删除特殊标记1,并且只删除它后面的第二行:

special marker 1
text 1
text 2
text 3
我是否可以使用sed搜索块的实例并得出:

text 1
text 3
我知道以下命令:

sed -i '/START/,/END/ {/special marker 1/{n;n;N;d;}}' filename;
但是,此命令只给我留下以下信息:

text 1
因此,它似乎将下一行操作加倍并删除。有没有办法修复此命令或以其他方式执行此操作?

使用awk可以执行以下操作:

awk '/special marker 1/{p=NR; next} p && NR==p+2{p=0; next} 1' file
text 1
text 3
使用awk可以执行以下操作:

awk '/special marker 1/{p=NR; next} p && NR==p+2{p=0; next} 1' file
text 1
text 3
告诉sed打印以跳过两行:

sed -ni '/special marker 1/{n;p;n;n};p' filename
当您只需要输出两行时,该命令可以替换为

sed -ni '/special marker 1/{n;p;n;n;p}' filename
告诉sed打印以跳过两行:

sed -ni '/special marker 1/{n;p;n;n};p' filename
当您只需要输出两行时,该命令可以替换为

sed -ni '/special marker 1/{n;p;n;n;p}' filename

尝试以下awk解决方案也一次

解决方案1:

解决方案2:


尝试以下awk解决方案也一次

解决方案1:

解决方案2:


谢谢,这似乎是最接近我所想的。谢谢,这似乎是最接近我所想的。