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

veh*_*zzz 74 scripting awk sed

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

some text
lorem ipsum dolor sit amet
more text
Run Code Online (Sandbox Code Playgroud)

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

some text
lorem ipsum dolor sit amet
consectetur adipiscing elit
more text
Run Code Online (Sandbox Code Playgroud)

Kam*_*mal 148

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

sed -i '/pattern/a \
line1 \
line2' inputfile
Run Code Online (Sandbox Code Playgroud)

输出:

#cat inputfile
 pattern
 line1 line2 
Run Code Online (Sandbox Code Playgroud)

要在之前添加行:

sed -i '/pattern/i \
line1 \
line2' inputfile
Run Code Online (Sandbox Code Playgroud)

输出:

#cat inputfile
 line1 line2 
 pattern
Run Code Online (Sandbox Code Playgroud)

  • 这些示例在`line1`之后插入一个空格(用GNU sed测试).反斜杠应该没有空格:``line1 \``.只忽略`a`和`i`命令后面的空格. (12认同)
  • 如何在读取其他文件中的行时混合前置文件,其中`sed -i'/ pattern/r somefile.txt'`? (2认同)

jah*_*roy 35

以下添加一行SearchPattern.

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

New Text在包含的每一行下面插入一行SearchPattern.

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

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

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

  • 单行示例使我更容易理解,并且最适用于我的大多数用例.谢谢. (5认同)

小智 6

使用起来更便携;某些系统不支持 sed 中的 \n

printf "/^lorem ipsum dolor sit amet/a\nconsectetur adipiscing elit\n.\nw\nq\n" |\
    /bin/ed $filename
Run Code Online (Sandbox Code Playgroud)


ali*_*oar 5

在你的节中给定的诗句之后插入一个新的诗句:

sed -i '/^lorem ipsum dolor sit amet$/ s:$:\nconsectetur adipiscing elit:' FILE
Run Code Online (Sandbox Code Playgroud)