0

我正在尝试编辑一个如下所示的文件:

Separator line of dashes
Letters
Separator line of dashes
aaa
bbb

Separator line of dashes
Numbers
Separator line of dashes
111
222

破折号之间的短语应该是章节的标题。

使用 sed,我想在“数字”部分添加一个类似“000”的字符串。输出将是:

Separator line of dashes
Numbers
Separator line of dashes
000
111
222

我的问题是:我如何告诉 sed 我想将“000”作为标题为“数字”的部分的第一行附加?

我有以下内容:

sed -i '/Numbers/ a\New ACE goes here' myFile

这样,我的行就添加到了标题的正下方,但实际上我需要它下面的 2 行。

为了我将来的参考,如果我想告诉 sed,在匹配“此行”之后将其附加到特定行号会怎样?

4

2 回答 2

1

使用

sed '/^Numbers/ { N; N; s/^\(.*\)\(\n\)/\1\2000\n/ }' infile

当它找到匹配的行时Numbers,追加接下来的两行并将000字符串添加到最后一个换行符之后。

它产生:

Separator line of dashes
Letters
Separator line of dashes
aaa
bbb

Separator line of dashes
Numbers
Separator line of dashes
000
111
222

编辑:使用a\在不进行替换的情况下追加新行,如评论中所述。N现在只在匹配后追加下一行( ),Numbers因为a\追加了自己的换行符。

sed '/^Numbers/ { N; a\
000
}' infile

它产生相同的结果。

于 2013-09-09T21:39:37.653 回答
0

更容易。当第一个字段匹配Numbers时,打印该行,读取下一个(getline),打印它,然后打印您的行(000)。最后一个print是输入文件的每一行的默认值:

awk '$1 ~ /Numbers/ { print; getline; print; print "000"; next } { print }' infile

它产生:

Separator line of dashes
Letters
Separator line of dashes
aaa
bbb

Separator line of dashes
Numbers
Separator line of dashes
000
111
222
于 2013-09-09T21:33:45.253 回答