使用 sed 在特定行后添加换行符

add newline after specific lines with sed

我的输出为:

A: this thing
B: that thing
A: 23
B: 46
A: negative
B: positive

我正在使用 sed/awk 创建。我如何使用 sed(我认为 sed 是正确的选择?)在每 B: 行之后添加换行符以产生:

A: this thing
B: that thing

A: 23
B: 46

A: negative
B: positive

使用 awk 可以做到:

awk '{print} /^B:/{print ""}' file
A: this thing
B: that thing

A: 23
B: 46

A: negative
B: positive
sed '/^B:/a\
    ' file

a 命令在匹配行之后附加以下内容。

您也可以执行类似 's/^B:.*/&\n/' 的操作,编辑行并添加换行符。

awk中也很容易处理。

一种方法使用 sed ...

sed 's/^\(B:.*\)/\n/'

或如下@JonathanLeffler评论:

sed 's/^B:.*/&\n/'

尝试这样的事情:

sed -E -i 's:(^B.*$):\n:g' filename

它在 filename 中以字母 B 开头的每一行都附加一个新行。

使用 GNU sed(使用 G 选项附加保持 space(默认为空白)到模式 space:

sed '/^B:/G' file
A: this thing
B: that thing

A: 23
B: 46

A: negative
B: positive

这是另一个awk

awk '/^B:/ {[=10=]=[=10=]"\n"} 1' file
A: this thing
B: that thing

A: 23
B: 46

A: negative
B: positive