33

我花了一段时间才弄清楚如何做到这一点,所以发布以防其他人也在寻找相同的东西。

4

6 回答 6

32

要在模式后添加换行符,您还可以说:

sed '/pattern/{G;}' filename

引用GNU sed 手册

G
    Append a newline to the contents of the pattern space, and then append the contents of the hold space to that of the pattern space.

编辑:

顺便说一句,这恰好被sed one liner覆盖:

 # insert a blank line below every line which matches "regex"
 sed '/regex/G'
于 2013-06-28T11:22:52.510 回答
10

这个 sed 命令:

sed -i '' '/pid = run/ a\
\
' file.txt

找到符合以下条件的行:pid = run

file.txt 之前

; Note: the default prefix is /usr/local/var
; Default Value: none
;pid = run/php-fpm.pid

; Error log file

并在 file.txt 中的该行之后添加一个换行符

file.txt 之后

; Note: the default prefix is /usr/local/var
; Default Value: none
;pid = run/php-fpm.pid


; Error log file

或者,如果您想添加文本和换行符:

sed -i '/pid = run/ a\
new line of text\
' file.txt

file.txt 之后

; Note: the default prefix is /usr/local/var
; Default Value: none
;pid = run/php-fpm.pid
new line of text

; Error log file
于 2013-06-28T10:52:19.847 回答
4

一个简单的替换效果很好:

sed 's/pattern.*$/&\n/'

例子 :

$ printf "Hi\nBye\n" | sed 's/H.*$/&\nJohn/'
Hi
John
Bye

要符合标准,请将 \n 替换为反斜杠换行符:

$ printf "Hi\nBye\n" | sed 's/H.*$/&\
> John/'
Hi
John
Bye
于 2016-06-06T02:17:14.453 回答
3
sed '/pattern/a\\r' file name 

它会在模式之后添加一个返回,同时g用一个空行替换模式。

如果必须在文件末尾添加新行(空白),请使用:

sed '$a\\r' file name
于 2017-06-06T13:25:24.267 回答
0

另一种可能性,例如,如果您没有空的保持寄存器,可能是:

sed '/pattern/{p;s/.*//}' file

说明:
/pattern/{...}= 应用命令序列,如果找到带有模式的行,
p= 打印当前行,
;= 命令之间的分隔符,
s/.*//= 替换模式寄存器中的任何内容,
然后自动打印空模式寄存器作为附加行)

于 2019-04-22T23:38:02.967 回答
0

最简单的选择 -->

sed '我\

' 文件名

于 2021-04-21T06:37:52.067 回答