我怎样才能用转义序列替换换行符?

我怎样才能用转义序列替换换行符?

使用sed使包含某些字符的文本适合在字符串文字中使用很简单:

sed "s/\\\\/\\\\\\\\/g"
sed "s/\\\"/\\\\\\\"/g"

但是我怎样才能对包含换行符的文本文件做类似的事情呢?

答案1

如果你正在处理流水线命令,那么我喜欢@vossad01 的回答。然而,在多行脚本中,我更喜欢普通的 Bash参数扩展,这样既更高效(不需要 fork 新的进程sed或者创建任何管道),又也许更容易阅读一点:

${varName//$'\n'/\\n}

读者指南:

  • ${...}- 使用参数扩展来解释内部内容
  • varName- 包含内容的变量的名称
  • //- 替换所有实例...
  • $'\n'- 字面换行符(我们正在将转义进入此处的字面意思)
  • /- 用。。。来代替...
  • \\n- 换行符转义序列 ( "\n"):请注意,我们必须对反斜杠本身进行转义

例子:

$ foo="$(printf '%s\n' $(seq 1 3))"
$ echo "$foo"
1
2
3
$ echo "${foo//$'\n'/\\n}"
1\n2\n3

答案2

使用:

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

它使用了如何使用 sed 替换换行符 (\n)?用转义的换行符作为替代字符来匹配此处的问题。

答案3

我解决了这个问题:

sed 's/$/\\n/g' | tr -d'\n'

sed 在每一行的末尾放置“\\n”,然后 tr 删除换行符。

答案4

这个awk解决方案对我有用:

$ awk 1 ORS='\\n' file.txt

功劳归于这个优秀的答案

相关内容