&
的转义字符是什么(在替换中包含匹配)?
我需要用cat
&quo;cat&quo;
cat file | sed -e 's\cat\&quo;cat&quo;\'
答案 0 :(得分:3)
\
不是替换分隔符的最佳选择 - 经常使用/
,在这种情况下更适合使用\
用于转义:
sed 's/cat/\&quo;cat\&quo;/' file
请注意,您不必使用cat
来管道输入;只需将输入文件作为参数。
&
必须转义才能获得文字&
;否则,它代表模式空间的整个匹配部分(参见manual):
$ sed 's/XXX/~&~/' <<< 'aaaXXXaaa'
aaa~XXX~aaa
$ sed 's/XXX/~\&~/' <<< 'aaaXXXaaa'
aaa~&~aaa
答案 1 :(得分:0)
Bourne或POSIX shell中需要转义的字符与Bash不同。通常(非常)Bash是这些shell的超集,所以你在shell
中转义的任何内容都应该在Bash中转义。
一个不错的一般规则是“如果有疑问,就逃避它”。但是逃避一些角色给了他们特殊的意义,比如\n
。这些列在man bash
和Quoting
下的echo
页面中。
除此之外,转义任何不是字母数字的字符,它更安全。我不知道一个明确的清单。
手册页将它们列在某处,但不是在一个地方。学习语言,这是确定的方法。
让我感到惊讶的是!
。这是Bash(和csh)中的特殊字符(历史扩展),但不是Korn shell中的特殊字符。即使echo "Hello world!"
也存在问题。像往常一样使用单引号删除了特殊含义。