Sed特殊字符

时间:2018-01-10 21:59:58

标签: sed

我想更改一些文件中的主目录。 我想我必须逃避大括号 - 就像这样:

sed -i 's/\$\{HOME\}/\/casper\/home/g' /var/tmp/casper.txt

我在sed中遇到的一切都告诉我,我必须逃避括号,但我没有。我唯一需要逃脱的是美元符号。 sed使用什么样的正则表达式引擎,哪些是需要转义的特殊字符列表,哪些不需要转义。

sed -i 's/\${HOME}/\/casper\/home/g' /var/tmp/casper.txt

1 个答案:

答案 0 :(得分:1)

我不是专家,只是regexps的用户,所以我不能给你严格的技术答案,但根据info sed,如果没有-r--regexp-extended)调用,它使用基本正则表达式。如果放置-r,则使用扩展正则表达式。信息的附录中有一个解释:

The only difference between basic and extended regular expressions is in
the behavior of a few characters: '?', '+', parentheses, braces ('{}'),
and '|'.  While basic regular expressions require these to be escaped if
you want them to behave as special characters, when using extended
regular expressions you must escape them if you want them _to match a
literal character_.

顺便说一下,如果你需要在sed的正则表达式中加一个斜杠,那么使用不同的符号作为分隔符是非常有用的。它不需要是斜线,您可以选择符号arbibtrary,例如它可以是@。所以改为:

sed -i 's/\${HOME}/\/casper\/home/g' /var/tmp/casper.txt

你可以做到这一点:

sed -i 's@\${HOME}@/casper/home@g' /var/tmp/casper.txt