sed 通过换行符替换字符串,但不是相反[重复]

Posted

技术标签:

【中文标题】sed 通过换行符替换字符串,但不是相反[重复]【英文标题】:sed replaces string by line break but not the other way around [duplicate] 【发布时间】:2014-06-21 20:12:48 【问题描述】:

我正在尝试替换换行符,我想要为此使用sed(请不要建议替代工具)。用我正在尝试的字符串替换换行符

sed 's/\n/string/g'

工作,至少在我的系统上(Ubuntu 12.04 上的 bash)。但是以下

sed 's/string/\n/g'

确实用换行符替换所有出现的string

例如,考虑以下file

hello
there

sed 's/\n/ /g' file 给了我同样的结果:

hello
there

但是sed 's/hello/hello\n/g' file 给了我一个换行符:

hello

there

有人能告诉我为什么sed 能够写入 \n 的新行但不能读取吗?

【问题讨论】:

【参考方案1】:

sed 适用于输入行,您不能像那样替换换行符。您需要将 输入行 附加到模式空间。

sed ':a;$!N;s/\n/string/;ta' inputfile

将用string 替换换行符。

【讨论】:

这就是为什么我会使用不同的工具:-)【参考方案2】:
 sed -n '1h;1!H;$x;s/\n/string/gp' YourFile

其他方法,首先加载到缓冲区中,最后一次性更改并打印结果

【讨论】:

以上是关于sed 通过换行符替换字符串,但不是相反[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在bash中将空格替换为新行[重复]

sed 没有给我正确的 Mac 换行符替换操作 - GNU sed 和 BSD / OSX sed [重复]

sed ack 搜索/用字符串替换换行符

使用 tr 用空格替换换行符[重复]

Solaris里面的sed怎样把指定字符替换成换行

用sed 怎么替换包含换行符\n的文本.比如这些