问题:用 \n
用 sed
替换一些正则表达式。
解决方法:类似的答案有很多[1][2][3][4],还有很多其他的链接我就不链接了。他们都建议您创建一个新标签 :a
,合并行 N
,如果不是文件结尾 :a
则分支到 $!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.
因此,首先,出于比较原因,如果我们尝试幼稚的方法:
$ seq 3 | sed 's/\n/ /g'
1
2
3
但是,使用此
-z
选项:$ seq 3 | sed -z 's/\n/ /g'
1 2 3
真正的问题:为什么?
鉴于它“合并”了文档中指定的所有行,我预计我将不得不使用
\0
而不是 \n
,因为:由于我没有找到任何相关的帖子,我想我可能在这里误解了一些东西......那么,它到底有什么作用?为什么有效?
最佳答案
使用 -z
会改变 sed 认为是一行的内容。 \n
仍然是 \n
,但它不会结束一行,但空字符(在 Sed 中表示为 \x0
)会。由于 seq
的输出中没有空字节,整个输出被视为一行并在单次迭代中处理(即用空格替换所有 \n
)。
关于Sed:用 "-z"替换换行符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52538158/