如何使用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
这将在循环中读取整个文件,然后用空格替换换行符。
说明:
通过创建标签
:a
。将当前和下一行附加到模式空间via
N
。如果我们在最后一行之前,则跳转到创建的标签
$!ba
($!
意味着不要在最后一行执行,因为应该有一个最终换行符)。最后,替换用模式空间(即整个文件)上的空格替换每个换行符。
这是与BSD和OS X一起使用的跨平台兼容语法sed
(根据@Benjie评论):
sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g' file
如您所见,使用sed
这个简单的问题是有问题的。有关更简单和适当的解决方案,请参阅此答案。
达令说
TA贡献1821条经验 获得超6个赞
使用tr
呢?
tr '\n' ' ' < input_filename
或完全删除换行符:
tr -d '\n' < input.txt > output.txt
或者如果你有GNU版本(有很长的选项)
tr --delete '\n' < input.txt > output.txt
aluckdog
TA贡献1847条经验 获得超7个赞
更短的awk替代方案:
awk 1 ORS=' '
说明
awk程序由条件代码块组成的规则构成,即:
condition { code-block }
如果省略代码块,则使用默认值:{ print $0 }
。因此,它1
被解释为真实条件并且print $0
对每一行执行。
当awk
读取输入时,它会根据RS
(记录分隔符)的值将其拆分为记录,默认情况下是新行,因此awk
默认情况下会解析输入行。拆分还涉及RS
从输入记录中剥离。
现在,在打印记录时,ORS
(输出记录分隔符)会附加到其上,默认值也是换行符。因此,通过更改ORS
为空格,所有换行符都将更改为空格。
添加回答
举报
0/150
提交
取消