我想在sed上使用这行:
--> ASD = $start ( *.cpp ) <--
其中$ start不是可变的,我想在它上面使用sed并将所有这一行替换为:
ASD = $dsadad ( .cpp )
如何让sed忽略特殊的charactars,我尝试在特殊字符之前添加反斜杠,但也许我弄错了,有人可以给我一个例子吗?
这就是我想要的:
sed 's/CPPS = \$(shell ls | grep \*\.cpp )/somereplace/' Makefile
答案 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