sed 删除模式 1 到模式 2 之后的行块,但不删除与模式 1 本身匹配的行?



我正在努力使用 sed 来完成"testfile.txt",每次它遇到一行delete_me: abc开始的行时,它就会:

  1. 保持线路delete_me: abc不变
  2. 但删除后面的所有行,直到到达文件中的下一个空白行。

例如。我想要这个输入:

delete_me: abc
sSAsaAaSA
AsaSAsaSAsa
asASAsS
^--- <blank line>

。仅更改为这一行:

delete_me: abc

我试过:

sed '/delete_me/ {n;d}' jil_testfile.txt
# deletes only the first line after 'delete_me'
sed '/delete_me/,/^$/d' jil_testfile.txt
# nearly works but deletes the 'delete_me' line too which I want to stay preserved.

有什么建议吗?

这可能对你有用(GNU sed(:

sed -n ':a;/delete_me/{p;:b;n;//ba;bb};p' file

照常打印行,直到第一次出现delete_me。打印此行,除非该行包含delete_me,否则不要再打印任何行。

由于自我编写第一个解决方案以来规范已更改,因此这是新的解决方案:

sed -n '/delete_me/{p;:a;n;/^$/b;ba};p' file

最新更新