Bash:在文件中第一次出现匹配模式后添加多行

时间:2013-11-12 20:15:16

标签: bash sed awk

如何用awk / sed实现这个目标?

输入:

zero
one
two
three
four

输出:

zero
one
    one-one
    one-two
    one-three
two
three
four

注意:我需要将实际标签包含在要添加的新行中。

3 个答案:

答案 0 :(得分:4)

使用GNU sed,您可以使用a\ 命令在匹配后附加行(或i\在匹配前插入行。

sed '/one/a\ \tone-one\n\tone-two\n\tone-three' file 
zero
one
    one-one
    one-two
    one-three
two
three
four

答案 1 :(得分:2)

使用awk:

awk '1; /one/{print "\n\tone-one\n\tone-two\n\tone-three"}' file
zero
one
        one-one
        one-two
        one-three
two
three
four

答案 2 :(得分:0)

标题表示第一次出现之后' (我认为occurene是一个错字)但是,其他答案似乎并不能满足这一要求,并且由于样本集的独特性,在测试时并不那么明显。

如果我们将样本集更改为

zero
one
three
one
four
five
one
six
seven
one

然后我们需要像awk '/one/ && !x {print $0; print "\tone-one\n\tone-two\n\tone-three"; x=1;next} 1'那样产生

的东西
zero
one
    one-one
    one-two
    one-three
    two
three
one
four
five
one
six
seven
one

实际上,thisthat答案也提供了更多选项。