我有我想要使用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