繁体   English   中英

sed 带特殊字符

[英]sed with special characters

我有这条线,我想在 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/\\*//' 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

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

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

我有一个用例,我必须用一个变量替换文本,该变量包含一个特殊符号,例如 (xyz-compute@developer.gserviceaccount.com)。 这个@符号造成了一个问题。 所以我发现这个解决方案很有用。

SERVICE_ACCOUNT="xyz-compute@developer.gserviceaccount.com"
sed -i 's/DEVOPS_SERVICE_ACCOUNT/'${SERVICE_ACCOUNT}'/g' file.txt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM