在linux shell脚本中如何找到1个字符串并删除前4行

时间:2014-12-10 11:25:38

标签: linux perl shell awk sed

我希望每次在我的文件中都有包含模式“黄色”的行,它会删除此行和前面的4行。

示例,我的文件:

orange
green
grey
black
blue
yellow
red
green
grey
white
black
yellow
blue

输出文件为:

orange
red
blue

非常感谢。如果可能的话,使用unix标准命令,如awk,sed,cut,grep,perl脚本,php脚本,python脚本......(我的输入文件非常大,差不多2Gb,2500万行)

3 个答案:

答案 0 :(得分:5)

使用tacawk

tac file | awk '/yellow/{p=5} !p--' | tac
orange
red
blue
  • tac - 反向连接和打印文件
  • awk命令将计数器设置为5并跳过下一行的打印

答案 1 :(得分:2)

来自命令行的perl,

perl -ne'
  push @r, $_;
  @r = () if /^yellow$/;
  print eof() ? @r : @r >=5 ? shift @r : "";
' file

输出

orange
red
blue

答案 2 :(得分:1)

另一个awk

awk '{a[++c]=$1}/yellow/{for(i=1;i<=c-5;i++){print a[i]};c=0;delete a}END{for(i=1;i<=c;i++){print a[i]}}' file