sed与特殊字符

我有我想要使用sed的这一行:

--> ASD = $start ( *.cpp ) <-- 

$ start不是可变的,我想用sed来代替所有的行:

 ASD = $dsadad ( .cpp ) 

我怎样才能使sed忽略特殊的charactars,我试图在特殊字符之前加斜杠,但也许我错了,有人可以给我一个例子吗?

这是我想要的:

sed's / CPPS = \ $(shell ls | grep * .cpp)/ somereplace /'Makefile

 sed 's/\$start/\$dsadad/g' your_file >> ASD = $dsadad ( *.cpp ) sed 's/\*//g' your_file >> ASD = $start ( .cpp ) 

按照您的编辑:

 sed -i 's/ASD = \$start ( \*.cpp )/ASD = \$dsadad ( .cpp )/' somefile >> ASD = $dsadad ( .cpp ) 

添加-i(–inplace)来编辑输入文件。

反斜杠工作正常。 echo '*.cpp' | sed 's/\*//' echo '*.cpp' | sed 's/\*//' => .cpp

如果你在一个shell中,你可能需要双重转义$ ,因为它是shell(变量扩展)和sed(行尾)的特殊字符,

echo '$.cpp' | sed "s/\\$//" echo '$.cpp' | sed "s/\\$//"或者echo '$.cpp' | sed 's/\$//' echo '$.cpp' | sed 's/\$//' //'=>'.cpp'

不要逃避() ; 这实际上会使他们在sed中成为特殊的(群体)。 其他一些常见字符包括[ ] \ . ?

这是如何逃脱你的例子:

 sed 's/ASD = \$start ( \*\.cpp )/ASD = $dsadad ( .cpp )/' somefile 

$* , 对于正则表达式是特殊的,所以他们需要从字面上逃避。

 sed 's/ASD = \$start ( \*\.cpp )/ASD = \$dsadad ( .cpp )/' somefile