How to escape the ampersand character while using sed

前端 未结 3 1462
囚心锁ツ
囚心锁ツ 2020-12-30 07:25

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 repla

相关标签:
3条回答
  • 2020-12-30 07:46

    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.

    0 讨论(0)
  • 2020-12-30 07:55

    It's working for me

    bash>echo "'This is a string with 'single quote' & '&'" | sed "s/'/''/g"
    ''This is a string with ''single quote'' & ''&''
    
    0 讨论(0)
  • 2020-12-30 07:57

    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
    
    0 讨论(0)
提交回复
热议问题