我有一个看起来像这样的文本文件:
AAA
BBB
CCC
AAA
DDD
EEE
它有一个特定的关键字,例如AAA
。在遇到关键字后,我想复制以下行,然后在输出文件中再次写入。
我希望它看起来像这样:
AAA
BBB
BBB
CCC
AAA
DDD
DDD
EEE
有人会帮我这么做吗?
答案 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