unix中替换字符的转义字符

Escape character for replacement character in unix

& 的转义字符是什么(将匹配项包含在替换中)?

我需要用 &quo;cat&quo;

替换文件中的 cat
cat file | sed -e 's\cat\&quo;cat&quo;\'

Bourne 或 POSIX shell 中需要转义的字符不同于 Bash。通常(非常)Bash 是那些 shell 的超集,因此您在 shell 中转义的任何内容都应在 Bash.

中转义

一个不错的通用规则是 "if in doubt, escape it"。但是转义某些字符会赋予它们特殊的含义,例如 \n。这些列在 Quotingecho 下的 man bash 页面中。

除此之外,对任何非字母数字的字符进行转义,这样更安全。我不知道一个确定的列表。

手册页在某处列出了它们,但没有在一个地方列出。学好语言,才是正途。

让我印象深刻的是 !。这是 Bash(和 csh)中的特殊字符(历史扩展),但在 Korn shell 中不是。甚至 echo "Hello world!" 也会出现问题。像往常一样使用单引号会删除特殊含义。

\ 不是替换定界符的最佳选择 – / 经常被使用,并且更适合这种情况,因为 \ 用于转义:

sed 's/cat/\&quo;cat\&quo;/' file

请注意,您不必使用 cat 来通过管道传输到 sed;只需将输入文件作为参数。

& 必须转义才能获得文字 &;否则,它代表模式的整个匹配部分 space(参见 manual):

$ sed 's/XXX/~&~/' <<< 'aaaXXXaaa'
aaa~XXX~aaa
$ sed 's/XXX/~\&~/' <<< 'aaaXXXaaa'
aaa~&~aaa