How to escape single quote in sed?

帅比萌擦擦* 提交于 2019-11-26 03:39:05

问题


How to escape a single quote in a sed expression that is already surrounded by quotes?

For example:

sed \'s/ones/one\'s/\' <<< \'ones thing\'

回答1:


Quote sed codes with double quotes:

    $ sed "s/ones/one's/"<<<"ones thing"   
    one's thing

I don't like escaping codes with hundreds of backslashes – hurts my eyes. Usually I do in this way:

    $ sed 's/ones/one\x27s/'<<<"ones thing"
    one's thing



回答2:


One trick is to use shell string concatenation of adjacent strings and escape the embedded quote using shell escaping:

sed 's/ones/two'\''s/' <<< 'ones thing'

two's thing

There are 3 strings in the sed expression, which the shell then stitches together:

sed 's/ones/two'

\'

's/'

Hope that helps someone else!




回答3:


The best way is to use $'some string with \' quotes \''

eg:

sed $'s/ones/two\'s/' <<< 'ones thing'



回答4:


Just use double quotes on the outside of the sed command.

$ sed "s/ones/one's/" <<< 'ones thing'
one's thing

It works with files too.

$ echo 'ones thing' > testfile
$ sed -i "s/ones/one's/" testfile
$ cat testfile
one's thing

If you have single and double quotes inside the string, that's ok too. Just escape the double quotes.

For example, this file contains a string with both single and double quotes. I'll use sed to add a single quote and remove some double quotes.

$ cat testfile
"it's more than ones thing"
$ sed -i "s/\"it's more than ones thing\"/it's more than one's thing/" testfile 
$ cat testfile 
it's more than one's thing



回答5:


This is kind of absurd but I couldn't get \' in sed 's/ones/one\'s/' to work. I was looking this up to make a shell script that will automatically add import 'hammerjs'; to my src/main.ts file with Angular.

What I did get to work is this:

apost=\'
sed -i '' '/environments/a\
import '$apost'hammerjs'$apost';' src/main.ts

So for the example above, it would be:

apost=\'
sed 's/ones/one'$apost's/'

I have no idea why \' wouldn't work by itself, but there it is.




回答6:


I know this is going to sound like a cop out but I could never get sed working when there were both single and double quotes in the string. To help any newbies like me that are having trouble, one option is to split up the string. I had to replace code in over 100 index.hmtl files. The strings had both single and double quotes so I just split up the string and replaced the first block with <!-- and the second block with -->. It made a mess of my index.html files but it worked.



来源:https://stackoverflow.com/questions/24509214/how-to-escape-single-quote-in-sed

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!