Reputation: 1119
I have this line that I want to use sed on:
--> ASD = $start ( *.cpp ) <--
where $start is not a varaiable, I want to use sed on it and replace all this line with:
ASD = $dsadad ( .cpp )
How can I make sed ignore special charactars, I tried adding back slash before special characters, but maybe I got it wrong, can some one show me an example?
Here is what i want :
sed 's/CPPS = \$(shell ls | grep \*\.cpp )/somereplace/' Makefile
Upvotes: 14
Views: 86776
Reputation: 199
I have one use case where I have to replace a text with a variable, that variable contains a special symbol,
like ([email protected]). This @
symbol was creating an issue. So I found this solution useful.
SERVICE_ACCOUNT="[email protected]"
sed -i 's/DEVOPS_SERVICE_ACCOUNT/'${SERVICE_ACCOUNT}'/g' file.txt
Upvotes: 0
Reputation: 246764
The chacters $
,*
,.
are special for regular expressions, so they need to be escaped to be taken literally.
sed 's/ASD = \$start ( \*\.cpp )/ASD = \$dsadad ( .cpp )/' somefile
Upvotes: 1
Reputation: 80761
sed 's/\$start/\$dsadad/g' your_file
>> ASD = $dsadad ( *.cpp )
sed 's/\*//g' your_file
>> ASD = $start ( .cpp )
To follow your edit :
sed -i 's/ASD = \$start ( \*.cpp )/ASD = \$dsadad ( .cpp )/' somefile
>> ASD = $dsadad ( .cpp )
Add the -i (--inplace) to edit the input file.
Upvotes: 7
Reputation: 2829
Backslash works fine. echo '*.cpp' | sed 's/\*//'
=> .cpp
If you're in a shell, you might need to double escape $
, since it's a special character both for the shell (variable expansion) and for sed (end of line)
echo '$.cpp' | sed "s/\\$//"
or echo '$.cpp' | sed 's/\$//'
=> '.cpp'
Do not escape (
or )
; that will actually make them them special (groups) in sed. Some other common characters include [
]
\
.
?
This is how to escape your example:
sed 's/ASD = \$start ( \*\.cpp )/ASD = $dsadad ( .cpp )/' somefile
Upvotes: 4