unix中替换字符的转义字符

时间:2016-02-03 16:36:24

标签: unix sed escaping

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

我需要用cat

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

2 个答案:

答案 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 bashQuoting下的echo页面中。

除此之外,转义任何不是字母数字的字符,它更安全。我不知道一个明确的清单。

手册页将它们列在某处,但不是在一个地方。学习语言,这是确定的方法。

让我感到惊讶的是!。这是Bash(和csh)中的特殊字符(历史扩展),但不是Korn shell中的特殊字符。即使echo "Hello world!"也存在问题。像往常一样使用单引号删除了特殊含义。