我花了一段时间才弄清楚如何做到这一点,所以发布以防其他人也在寻找相同的东西。
问问题
82266 次
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 回答