问题:与替换一些正则表达式\n用sed。
解决方法:类似的答案有很多[ 1 ][ 2 ][ 3 ][ 4 ],还有很多其他的链接我就不链接了。他们都建议你创建一个新标签:a,合并行N,分支到:aif not end-of-file $!ba,然后执行一些命令。
也就是说......
在GNU sed手册中,有一个-z选项:
-z
--null-data
--zero-terminated
Treat the input as a set of lines, each terminated by a zero byte
(the ASCII ‘NUL’ character) instead of a newline. This option can
be used with commands like ‘sort -z’ and ‘find -print0’ to process
arbitrary file names.
Run Code Online (Sandbox Code Playgroud)
因此,首先,出于比较原因,如果我们尝试幼稚的方法:
$ seq 3 | sed 's/\n/ /g'
1
2
3
Run Code Online (Sandbox Code Playgroud)
但是,使用此-z选项:
$ seq 3 | sed -z 's/\n/ /g'
1 2 3
Run Code Online (Sandbox Code Playgroud)
鉴于它“合并”了文档中指定的所有行,我预计我将不得不使用\0而不是\n,因为:
将输入视为一组行,每行以零字节(ASCII 'NUL' 字符)结尾
由于我没有找到任何相关的帖子,我想我可能在这里误解了一些东西......那么,它到底有什么作用?为什么有效?
使用-z更改 sed 认为是一行的内容。\n遗骸\n,但它并没有结束的线,但空字符(它被表示为\x0在SED)会。由于在 的输出中没有空字节seq,整个输出被视为一行并在单次迭代中处理(即用\n空格替换所有的)。