I want to replace all single quotes in a string with two single quotes using sed. But when the string contains the &
character, the sed command is not replacing single quotes that come after that. How can I escape the &
character so that the single quotes after it are still replaced?
You don't need to escape anything in the input:
$ echo "123 ' foo & b'ar" | sed "s/'/''/g"
123 '' foo & b''ar
However, in the 'replacement' part of the s
command &
has a special meaning: it means 'match'. That's why the above command can be re-written as:
$ echo "123 ' foo & b'ar" | sed "s/'/&&/g"
123 '' foo & b''ar
Escape it with a \
like everything else that needs to be escaped, if needed:
$ echo "123 ' foo & b'ar" | sed "s/'/'\&'/g"
123 '&' foo & b'&'ar
It's easier to answer if you post your code, but I'm guessing you're not escaping the ampersand. Change &
to \&
if you want a literal ampersand.
See section 3.1.2 of The sed FAQ for a more detailed explantion, if you're curious.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With