问题:用 \nsed 替换一些正则表达式。

解决方法:类似的答案有很多[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/

10-13 06:18
查看更多