模式搜索和下一行复制

时间:2016-02-19 14:40:14

标签: perl unix awk sed

我有一个看起来像这样的文本文件:

AAA
BBB
CCC
AAA
DDD
EEE

它有一个特定的关键字,例如AAA。在遇到关键字后,我想复制以下行,然后在输出文件中再次写入。

我希望它看起来像这样:

AAA
BBB
BBB
CCC
AAA
DDD
DDD
EEE

有人会帮我这么做吗?

4 个答案:

答案 0 :(得分:3)

Sed可以这样做:

$ sed '/AAA/{n;p}' infile
AAA
BBB
BBB
CCC
AAA
DDD
DDD
EEE

这将查找模式(/AAA/),读取下一行输入(n)并打印它(p)。因为打印是默认操作,所以该行被打印两次,这就是我们想要的。

答案 1 :(得分:1)

awk救援!

$ awk 'd{print;d=0} /AAA/{d=1}1' file

AAA
BBB
BBB
CCC
AAA
DDD
DDD
EEE

解释

d{print;d=0} 如果标志d设置打印该行并重置标志,

/AAA/{d=1} 设置一个标志来复制给定模式的行,

1 并打印所有行。

答案 2 :(得分:0)

您可以将perl用于此

perl -e ' $a =undef;
          while(<>){
              chomp;
              if ($a eq "AAA"){
                  print "$_\n"
                 }
              print "$_\n";
              $a=$_;
              }' your_file.txt

这会遍历文件并打印每一行。如果上一行是&#34; AAA&#34;,则会打印两次。

答案 3 :(得分:0)

我不知道你是否同意我对单行程序的仇恨,但这在Perl中是完全可能的

$ perl -ne'print; print scalar <> x 2 if /AAA/' aaa.txt

输出

AAA
BBB
BBB
CCC
AAA
DDD
DDD
EEE