首页 文章

告诉sed究竟要附加一个字符串

提问于
浏览
0

我正在尝试编辑一个如下所示的文件:

Separator line of dashes
Letters
Separator line of dashes
aaa
bbb

Separator line of dashes
Numbers
Separator line of dashes
111
222

破折号之间的短语应该是部分的 Headers .

使用sed,我想在“Numbers”部分添加一个类似“000”的字符串 . 输出将是:

Separator line of dashes
Numbers
Separator line of dashes
000
111
222

我的问题是:我如何告诉sed我想附加“000”作为 Headers 为“Numbers”的第一行?

我有以下内容:

sed -i '/Numbers/ a\New ACE goes here' myFile

有了这个我的线被添加到 Headers 下面,但我需要它实际上下面2行 .

对于我将来的参考,如果我想告诉sed,在匹配“this line”后将其附加到特定的行号,会怎么样?

2 回答

  • 1

    使用sed

    sed '/^Numbers/ { N; N; s/^\(.*\)\(\n\)/\1\2000\n/ }' infile
    

    当找到与 Numbers 匹配的行时,追加接下来的两行并在最后一个换行符之后添加 000 字符串 .

    它产生:

    Separator line of dashes
    Letters
    Separator line of dashes
    aaa
    bbb
    
    Separator line of dashes
    Numbers
    Separator line of dashes
    000
    111
    222
    

    EDIT :使用 a\ 附加新行而不进行替换,如评论中所述 . 现在只在匹配 Numbers 之后追加下一行( N ),因为 a\ 附加了自己的换行符 .

    sed '/^Numbers/ { N; a\
    000
    }' infile
    

    它产生相同的结果 .

  • 0

    使用awk更容易 . 当第一个字段匹配 Numbers 时,打印该行,读取下一行( getline ),打印它然后打印您的行( 000 ) . 最后一个 print 是输入文件的每个其他行的默认值:

    awk '$1 ~ /Numbers/ { print; getline; print; print "000"; next } { print }' infile
    

    它产生:

    Separator line of dashes
    Letters
    Separator line of dashes
    aaa
    bbb
    
    Separator line of dashes
    Numbers
    Separator line of dashes
    000
    111
    222
    

相关问题