删除文件中从包含特定字符串的行到包含不同字符串的另一行之间的所有行

删除文件中从包含特定字符串的行到包含不同字符串的另一行之间的所有行

file.txt

start some text works "HELLO" foo test
  sum
  other
end

start som "other" line with text 'also'
  thing
  foo
end

我想删除位于"HELLO"的行,然后删除所有后续行,直到一行end上只写了内容而没有其他内容!

我知道这是一个相当奇怪的想法,但我希望一些基本的 bash 命令可以做到这一点,或者我传递第一个字符串和第二个字符串的函数,它会删除它们以及中间的所有内容!

文件最后看起来应该是这样的:


start som "other" line with text 'also'
  thing
  foo
end

谢谢你!

答案1

不是 bash,而是 sed:

$ sed '/"HELLO"/,/^end$/d' file.txt

start som "other" line with text 'also'
  thing
  foo
end

或 awk:

$ awk '/"HELLO"/,/^end$/{next} 1' file.txt

start som "other" line with text 'also'
  thing
  foo
end

相关内容