我已经给出了一个字符串和一个文件。我必须删除前 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
您可以sed
与head
和结合使用tail
:
( head -n30 file | sed '/pattern/d' ; tail -n+31 file ) > newfile
或者,使用 Perl:
perl -i~ -ne 'print if $. > 30 or not /pattern/' file