使用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
答案3
我解决了这个问题:
sed 's/$/\\n/g' | tr -d'\n'
sed 在每一行的末尾放置“\\n”,然后 tr 删除换行符。