有特殊字符的sed

时间:2011-05-12 15:56:50

标签: linux bash unix sed

我想在sed上使用这行:

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

其中$ start不是可变的,我想在它上面使用sed并将所有这一行替换为:

ASD = $dsadad ( .cpp ) 

如何让sed忽略特殊的charactars,我尝试在特殊字符之前添加反斜杠,但也许我弄错了,有人可以给我一个例子吗?

这就是我想要的:

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

3 个答案:

答案 0 :(得分:4)

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)以编辑输入文件。

答案 1 :(得分:3)

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

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

echo '$.cpp' | sed "s/\\$//"echo '$.cpp' | sed 's/\$//' =&gt; '的.cpp'

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

这是逃避你的榜样的方法:

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

答案 2 :(得分:1)

字符$*.对于正则表达式是特殊的,因此需要将它们转义为字面意思。

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