83

我需要编辑大量文件,方法是在独特模式的正下方或上方插入一行或多行。请告知如何在 shell 中使用sed, awk, perl(或其他任何东西)来做到这一点。谢谢!例子:

some text
lorem ipsum dolor sit amet
more text

我想在consectetur adipiscing elit之后插入lorem ipsum dolor sit amet,所以输出文件将如下所示:

some text
lorem ipsum dolor sit amet
consectetur adipiscing elit
more text
4

4 回答 4

162

在模式之后追加:(-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
于 2012-07-27T20:17:12.757 回答
38

下面在 . 之后添加一行SearchPattern

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

New Text在包含SearchPattern.

要添加两行,您可以使用 a\并在键入时输入换行符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/

于 2012-07-27T20:18:54.653 回答
5

Insert a new verse after the given verse in your stanza:

sed -i '/^lorem ipsum dolor sit amet$/ s:$:\nconsectetur adipiscing elit:' FILE
于 2012-07-27T20:24:26.630 回答
3

更便于使用 ed;某些系统不支持 sed 中的 \n

printf "/^lorem ipsum dolor sit amet/a\nconsectetur adipiscing elit\n.\nw\nq\n" |\
    /bin/ed $filename
于 2013-06-05T21:28:47.167 回答