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

Scripting 使用sed,在图案上方或下方插入一条线?,scripting,sed,awk,Scripting,Sed,Awk,我需要编辑大量的文件,通过插入一行或多行,无论是在一个唯一的图案的正下方还是上方。请建议如何在shell中使用sed、awk、perl(或任何其他内容)执行此操作。谢谢例如: some text lorem ipsum dolor sit amet more text 我想在lorem ipsum dolor sit amet之后插入Concetetur Adipising elit,因此输出文件如下所示: some text lorem ipsum dolor sit amet consec

我需要编辑大量的文件,通过插入一行或多行,无论是在一个唯一的图案的正下方还是上方。请建议如何在shell中使用
sed
awk
perl
(或任何其他内容)执行此操作。谢谢例如:

some text
lorem ipsum dolor sit amet
more text
我想在lorem ipsum dolor sit amet之后插入
Concetetur Adipising elit
,因此输出文件如下所示:

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

要在模式后追加:(-i表示就地替换)。第1行和第2行是要附加(或前置)的行

输出:

#cat inputfile
 pattern
 line1 line2 
#cat inputfile
 line1 line2 
 pattern
要在以下操作之前预先结束行:

sed -i '/pattern/i \
line1 \
line2' inputfile
输出:

#cat inputfile
 pattern
 line1 line2 
#cat inputfile
 line1 line2 
 pattern

下面在
SearchPattern
之后添加一行

sed-i'/SearchPattern/anewtext'SomeFile.txt

它在包含
搜索模式的每行下方插入
新文本

要添加两行,您可以使用
\
并在键入
新文本
时输入换行符

POSIX sed需要
\
sed函数后的换行符。[1]
指定不带换行符的要追加的文本是GNU-sed扩展(如
sed
info页面中所述),因此其用法不便于移植


[1]

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

sed -i '/^lorem ipsum dolor sit amet$/ s:$:\nconsectetur adipiscing elit:' FILE

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

printf "/^lorem ipsum dolor sit amet/a\nconsectetur adipiscing elit\n.\nw\nq\n" |\
    /bin/ed $filename

增加了一个例子。请注意,“你好,我的爱人,你是脏女孩”必须是该行中唯一的字符串。@vehomzzz:下面的模式搜索包含脏女孩的行。在该行上,它执行替换命令,将行尾($)替换为返回(\n)和性感骑士行。我已经编辑了问题和所有引用问题示例的答案。只要指出它,这样你就可以编辑你的评论,如果你想这样做的话。一行程序的例子使我更容易理解,并且最适用于我的大多数用例。谢谢。示例在
第1行之后插入空格(使用GNU sed测试)。反斜杠后面应该没有空格:
line1\
。只有
a
i
命令后的空格被忽略。如何在读取另一个文件中
sed-i'/pattern/r somefile.txt'
的行时混合前置符?为避免插入空格,只需删除
i
(或
a
)字符和“``之间的空格。@AquariusPower在GNU sed中,
/pattern/e cat somefile.txt
,它会将
somefile.txt
粘贴到
/pattern/
之前的模式空间中。这可能是非常有用的,
r
直接将
somefile.txt
粘贴到输出流中。要测试它,请保留i标志。这是在链接复制之前在Google上出现的。因此,对语法、样式和示例内容进行了编辑。请注意,您可以添加-n和+n命令,其中n是任意整数,以向上或向下移动,从而在搜索字符串区域的任何必要位置插入行。