unix中替换字符的转义字符

unix中替换字符的转义字符,unix,sed,escaping,Unix,Sed,Escaping,和的转义字符是什么(在替换中包括匹配项) 我需要用替换文件中的cat;猫&quo cat file | sed -e 's\cat\&quo;cat&quo;\' 需要转义的字符在Bourne或POSIX shell中与Bash中不同。通常(非常)Bash是这些shell的超集,因此在shell中转义的任何内容都应该在Bash中转义 一个很好的一般规则是“如果有疑问,就逃避它”。但是对某些字符进行转义会赋予它们特殊的含义,如\n。它们列在manbash页面的Quoting和ec

的转义字符是什么(在替换中包括匹配项)

我需要用
替换文件中的
cat
;猫&quo

cat file | sed -e 's\cat\&quo;cat&quo;\'

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

一个很好的一般规则是“如果有疑问,就逃避它”。但是对某些字符进行转义会赋予它们特殊的含义,如
\n
。它们列在
manbash
页面的
Quoting
echo

除此之外,转义任何非字母数字的字符更安全。我不知道有哪一个确切的清单

手册页列出了它们的全部位置,但不在一个地方。学习语言,这是确定的方法


让我抓狂的是
。这是Bash(和csh)中的一个特殊字符(历史扩展),但在kornshell中不是。即使是
echo“Hello world!”
也会出现问题。像往常一样,使用单引号会删除特殊含义。

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

sed 's/cat/\&quo;cat\&quo;/' file
请注意,您不必使用
cat
将管道连接到sed;只需将输入文件作为参数

必须对
&
进行转义才能获得文本
&
;否则,它代表模式空间的整个匹配部分(请参见):


$sed's/XXX/~&~/'您可能想解释为什么
&
字符需要转义。@glennjackman啊,是的,我会这么做的。我想OP意识到它有一些特别之处。
$ sed 's/XXX/~&~/' <<< 'aaaXXXaaa'
aaa~XXX~aaa
$ sed 's/XXX/~\&~/' <<< 'aaaXXXaaa'
aaa~&~aaa