在UNIX/Linux操作系统下,如何使用sed将一个模式替换为换行符(\n)?

5

我有一个包含如下内容的txt文件:

Some random
text here. This file
has multiple lines. Should be one line.

我使用:

sed '{:q;N;s/\n/:sl:/g;t q}' file1.txt > singleline.txt

并获得:

Some random:sl:text here. This file:sl:has multiple lines. Should be one line.

现在我想将:sl:模式替换为换行符(\n)。当我使用以下代码时:
sed 's/:sl:/&\n/g' singleline.txt

I get:

Some random:sl:
text here. This file:sl:
has multiple lines. Should be one line.

如何将模式替换为换行符,而不是在模式后添加换行符?


":sl:" 模式是什么意思? - Avinash Raj
sed 's/:sl:/\n/g' singleline.txt - Avinash Raj
@AvinashRaj,“:sl:”表示“单行”。也可以是其他任何内容。 - Rlearner
2个回答

2

Sed使用&作为匹配模式的快捷方式。所以你将用:s1:替换成:s1:\n

请按照以下方式更改sed命令:

sed 's/:sl:/\n/g' singleline.txt

2
仅供参考,这在macOS(和可能是BSD?)版本的sed上无法正常工作;来自man页面:“但是,您不能在地址或替换命令中使用文字换行符。”如果您期望此行为,则可能需要使用MacPorts或Homebrew安装GNU sed(通常提供为“gsed”)。 - TheDudeAbides

1

您可以使用 tr 命令更轻松地完成此操作:tr '\n' ' ' < singleline.txt


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接