Sed:删除前n行之间包含给定字符串的行

Sed:删除前n行之间包含给定字符串的行

我已经给出了一个字符串和一个文件。我必须删除前 30 行之间具有给定字符串的行。尝试过类似的东西sed -i '/pattern/1,30d' filename 但它给出了错误。更具体地说,我想要的是 sed 仅分析前 30 行,如果找到给定的模式,则删除该行。

答案1

至少使用 GNU sed,似乎可以做到

sed '1,30{/pattern/d}' file

缩小测试:给出file

some line
pattern
other line
some line
pattern
other line

然后

$ sed '1,3{/pattern/d}' file
some line
other line
some line
pattern
other line

答案2

您可以sedhead和结合使用tail

( head -n30 file | sed '/pattern/d' ; tail -n+31 file ) > newfile

或者,使用 Perl:

perl -i~ -ne 'print if $. > 30 or not /pattern/' file

相关内容