sed - 使用命令行追加到下一行

时间:2012-03-17 17:14:38

标签: linux command-line sed append

每当我在文本文件中遇到“=”时,我希望将“dddd”附加到下一行。

此命令

sed -i '/=/s|$| dddd|' *.krn

接近我正在寻找的东西,因为它附加到“=”所在的当前行。我怎样才能附加到下一行呢?

4 个答案:

答案 0 :(得分:3)

使用追加,见这里:

E.g:

$ echo $'abc\ndef\ne=f\nqqq'
abc
def
e=f
qqq
$ echo $'abc\ndef\ne=f\nqqq'|sed '/=/adddd'
abc
def
e=f
dddd
qqq

根据@ je4d的评论编辑澄清如果你想附加到下一行的内容,你可以使用:

$ echo $'abc\ndef\ne=f\nqqq\nyyy'
abc
def
e=f
qqq
yyy
$ echo $'abc\ndef\ne=f\nqqq\nyyy'|sed '/=/{n;s/$/ dddd/}'
abc
def
e=f
qqq dddd
yyy

如果您需要,请参阅此处获取更多信息的优质sed备忘单:

答案 1 :(得分:3)

所以重申一下这个问题,当你在一行上匹配时,你想要在下一行附加一个字符串---一条已经存在的行,而不是在新行后面添加一个新行。

我认为这对你有用:

sed '/=/ { N; s/$/ ddd/ }'

假设您有一个类似的文件:

=
hello
world
=
foo
bar
=

然后在其上处理此命令将产生:

=
hello ddd
world
=
foo ddd
bar
=

这里的诀窍是首先使用N命令。这将读入“下一行”输入。后面的命令将应用于下一行。

答案 2 :(得分:1)

我不是sed guru,但我可以用awk做你想做的事情:

'{PREV=MATCH; MATCH="no"}
 /=/{MATCH="yes"} 
 PREV=="yes"{print $0 " dddd"}
 PREV!="yes"{print}'

演示:

$ echo -e 'foo\nba=r\nfoo\n=bar\nfoo\nfoo\nb=ar\nx' 
foo
ba=r
foo
=bar
foo
foo
b=ar
x

$ echo -e 'foo\nba=r\nfoo\n=bar\nfoo\nfoo\nb=ar\nx' | awk '{APPEND=LAST; LAST="no"} /=/{LAST="yes"} APPEND=="yes"{print $0 " dddd"} APPEND!="yes"{print}'
foo
ba=r
foo dddd
=bar
foo dddd
foo
b=ar
x dddd

答案 3 :(得分:0)

这可能对您有用:

echo -e "=\nx " | sed '/=/{$q;N;s/$/dddd/}'
=
x dddd