为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用sed替换换行符(\ n)?

如何使用sed替换换行符(\ n)?

如何使用sed替换换行符(\ n)?如何\n使用sed命令替换换行符()?我没试成功:sed 's#\n# #g' file sed 's#^$# #g' file我如何解决它?
查看完整描述

4 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

在GNU中使用此解决方案sed

sed ':a;N;$!ba;s/\n/ /g' file

这将在循环中读取整个文件,然后用空格替换换行符。

说明:

  1. 通过创建标签:a

  2. 将当前和下一行附加到模式空间via N

  3. 如果我们在最后一行之前,则跳转到创建的标签$!ba$!意味着不要在最后一行执行,因为应该有一个最终换行符)。

  4. 最后,替换用模式空间(即整个文件)上的空格替换每个换行符。

这是与BSD和OS X一起使用的跨平台兼容语法sed(根据@Benjie评论):

sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g' file

如您所见,使用sed这个简单的问题是有问题的。有关更简单和适当的解决方案,请参阅此答案


查看完整回答
反对 回复 2019-05-27
?
达令说

TA贡献1821条经验 获得超6个赞

使用tr呢?

tr '\n' ' ' < input_filename

或完全删除换行符:

tr -d '\n' < input.txt > output.txt

或者如果你有GNU版本(有很长的选项)

tr --delete '\n' < input.txt > output.txt


查看完整回答
反对 回复 2019-05-27
?
aluckdog

TA贡献1847条经验 获得超7个赞

更短的awk替代方案:

awk 1 ORS=' '

说明

awk程序由条件代码块组成的规则构成,即:

condition { code-block }

如果省略代码块,则使用默认值:{ print $0 }。因此,它1被解释为真实条件并且print $0对每一行执行。

awk读取输入时,它会根据RS(记录分隔符)的值将其拆分为记录,默认情况下是新行,因此awk默认情况下会解析输入行。拆分还涉及RS从输入记录中剥离。

现在,在打印记录时,ORS(输出记录分隔符)会附加到其上,默认值也是换行符。因此,通过更改ORS为空格,所有换行符都将更改为空格。


查看完整回答
反对 回复 2019-05-27
  • 4 回答
  • 0 关注
  • 3991 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信