bash - 将\n 替换为空白,但使用 sed/tr 保留\r\n

标签 bash sed

我的输入如下:

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/

相关文章:

bash - 以编程方式将参数提供给 sed

bash - macOS make 命令递归工作

javascript - 如何在网页中访问硬盘中的文件

bash - Shell 脚本未通过 crontab 运行,但手动运行良好

linux shell `sed` 结果到变量 ,`line 51: 422: command not found`

bash - 删除 shell 中两个模式之间的线

regex - 使用带有 sed 的正则表达式删除 html 标记

linux - 解析 "control"文件的脚本出现问题

linux - 打印科学记数法的数字

awk - 列的行太长错误