使用sed到包含某些字符适用于字符串常量使用使文字很简单:
sed "s/\\\\/\\\\\\\\/g"
sed "s/\\\"/\\\\\\\"/g"
Run Code Online (Sandbox Code Playgroud)
但是如何对包含换行符的文本文件做类似的事情呢?
小智 20
如果您正在处理管道命令,那么我喜欢@vossad01的答案。然而,在多行脚本中,我更喜欢普通的 Bash参数扩展,这既更高效(不需要分叉新进程sed或创建任何管道),也可能更容易阅读:
${varName//$'\n'/\\n}
Run Code Online (Sandbox Code Playgroud)
读者指南:
${...}- 使用参数扩展解释内部内容varName- 包含内容的变量的名称//- 替换...的所有实例$'\n'- 文字换行符(我们在这里将转义符转换为文字)/- 用。。。来代替...\\n- 换行转义序列 ( "\n"):请注意,我们必须转义反斜杠本身例子:
${varName//$'\n'/\\n}
Run Code Online (Sandbox Code Playgroud)
小智 6
用:
sed ':a;N;$!ba;s/\n/\\n/g'
Run Code Online (Sandbox Code Playgroud)
其中使用如何使用 sed 替换换行符 (\n)的答案?替换一个转义的换行符作为替换来匹配这里的问题。
小智 6
我用以下方法解决了这个问题:
sed 's/$/\\n/g' | tr -d'\n'
Run Code Online (Sandbox Code Playgroud)
sed 在每行末尾放置 '\\n',然后 tr 删除换行符。
sed 是基于行的,这在尝试替换换行符时可能会导致问题。
sed 的官方文档特别提到了换行符,并指出它们在传递给 sed 之前被剥离。
我建议“tr”可能更适合这里。
例如,用空格替换换行符:
tr '\n' ' ' < inputfile
Run Code Online (Sandbox Code Playgroud)