我有这一行代码想要使用sed:
--> ASD = $start ( *.cpp ) <--
如果$start不是一个变量,我想在其上使用sed,并将所有这一行替换为:
ASD = $dsadad ( .cpp )
我怎样才能让sed忽略特殊字符?我尝试在特殊字符前添加反斜杠,但可能做错了,有人能给我展示一个例子吗?
以下是我的要求:
sed 's/CPPS = \$(shell ls | grep \*\.cpp )/somereplace/' Makefile
我有这一行代码想要使用sed:
--> ASD = $start ( *.cpp ) <--
如果$start不是一个变量,我想在其上使用sed,并将所有这一行替换为:
ASD = $dsadad ( .cpp )
我怎样才能让sed忽略特殊字符?我尝试在特殊字符前添加反斜杠,但可能做错了,有人能给我展示一个例子吗?
以下是我的要求:
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/\*//'
=> .cpp
如果您在Shell中,可能需要双重转义$
,因为它既是Shell的特殊字符(变量扩展),也是sed的特殊字符(行末)。
echo '$.cpp' | sed "s/\\$//"
或者 echo '$.cpp' | sed 's/\$//'
=> '.cpp'
不要转义(
或)
;这实际上会使它们在sed中成为特殊字符(组)。其他一些常见的字符包括[
]
\
.
?
这是如何转义您的示例:
sed 's/ASD = \$start ( \*\.cpp )/ASD = $dsadad ( .cpp )/' somefile
echo -n 'ASD = $start ( *.cpp )' | sed 's/\(.*\)start\(.*\)\*\(.*\)/\1dsadad\2\3/'
对我有效。 - pconcepcion*
前面忘记加反斜杠了。 - saphtecho '<table>, atablesir' | sed "s/<table>/<table class=\"table table-striped\">/g"
- bcag2$
、*
、.
这些字符在正则表达式中是特殊的,因此需要转义才能被当做文本匹配。
sed 's/ASD = \$start ( \*\.cpp )/ASD = \$dsadad ( .cpp )/' somefile
$dsadad
。$
在两侧都应该被转义。 - glenn jackman$
仅被转义以防止其特殊的正则表达式含义。 - glenn jackman我有一个使用案例,需要用变量替换文本,该变量包含特殊符号,例如(xyz-compute@developer.gserviceaccount.com)。这个@
符号会导致问题。所以我发现这个解决方案很有用。
SERVICE_ACCOUNT="xyz-compute@developer.gserviceaccount.com"
sed -i 's/DEVOPS_SERVICE_ACCOUNT/'${SERVICE_ACCOUNT}'/g' file.txt