我的输入如下:
Line 1\n
More Line 1\r\n
Line 2\n
More Line 2\r\n
我要制作
Line 1 More Line 1\r\n
Line 2 More Line 2\r\n
使用 sed 或 tr。我已尝试以下方法但不起作用:
sed -e 's/([^\r])\n/ /g' in_file > out_file
out_file 看起来仍然像 in_file。我还可以选择编写 python 脚本。
最佳答案
尝试:
sed '/[^\r]$/{N; s/\n/ /}' in_file
工作原理:
/[^\r]$/
这仅选择在换行符之前不有回车符的行。花括号中的命令仅针对与此正则表达式匹配的行执行。
N
对于那些选定的行,这会在其中附加一个换行符,然后读取下一行并附加它。
s/\n//
这会用空格替换不需要的换行符。
讨论
当 sed 一次读取一行但不读取该行后面的换行符时。因此,在下面的内容中,\n
将永远不会匹配:
sed -e 's/([^\r])\n/ /g'
我们可以匹配 [^\r]$
,其中 $
表示行尾,但这仍然不包括 \n
.
这就是为什么上面使用 N
命令读取下一行,并在附加换行符后将其附加到模式空间的原因。这使得换行符对我们可见,我们可以将其删除。
关于bash - 将\n 替换为空白,但使用 sed/tr 保留\r\n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46168689/