使用sed,在图案的上方或下方插入一条线?

时间:2012-07-27 20:08:00

标签: scripting sed awk

我需要编辑大量文件,方法是在唯一模式正下方或其上方插入(2)行。请告诉如何使用sed,awk,perl或shell中的任何其他内容。谢谢

some text
Hello My love, you're dirty girl
more text

我想在“你好我的爱,你是个肮脏的女孩”之后插入'我知道,我是,我的性感骑士',所以输出文件看起来像

some text
Hello My love, you're dirty girl
I know, I am, my sexy knight
more text

4 个答案:

答案 0 :(得分:141)

在模式后追加:( -i用于替换)。 line1和line2是您要追加(或前置)的行

sed -i '/pattern/a \
line1 \
line2' inputfile

<强>输出:

#cat inputfile
 pattern
 line1 line2 

在前面添加行:

sed -i '/pattern/i \
line1 \
line2' inputfile

<强>输出:

#cat inputfile
 line1 line2 
 pattern

答案 1 :(得分:33)

以下内容在SearchPattern之后添加一行。

sed -i '/SearchPattern/aNew Text' SomeFile.txt

它在包含New Text的每一行下方插入SearchPattern一行。

要添加两行,您可以使用\并在输入New Text时输入换行符。

POSIX sed在\ sed函数后需要a和换行符。 [1] 指定要在没有换行符的情况下追加的文本是GNU sed扩展(如sed信息页中所述),因此其用法不便于使用。

[1] https://unix.stackexchange.com/questions/52131/sed-on-osx-insert-at-a-certain-line/

答案 2 :(得分:3)

在你的诗节中给出一节之后插入一节新诗:

sed -i '/^Hello My love, you're dirty girl$/ s:$:\nI know, I am, my sexy knight:' FILE

答案 3 :(得分:1)

使用ed更加便携;有些系统不支持\ n in sed

printf "/^Hello My love, you're dirty girl/a\nI know, I am, my sexy knight\n.\nw\nq\n" |\
    /bin/ed $filename