如何在sed中逃脱单引号?

问题描述 投票:62回答:6

如何在已被引号包围的sed表达式中转义单引号?

例如:

sed 's/ones/one's/' <<< 'ones thing'
sed escaping quote
6个回答
112
投票

用双引号引用sed代码:

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

我不喜欢用数百个反斜杠逃避代码 - 伤害了我的眼睛。通常我这样做:

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

29
投票

一个技巧是使用相邻字符串的shell字符串连接,并使用shell转义来转义嵌入的引用:

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

two's thing

sed表达式中有3个字符串,然后shell拼接在一起:

sed 's/ones/two'

\'

's/'

希望能帮助别人!


6
投票

最好的方法是使用$'some string with \' quotes \''

例如:

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

3
投票

只需在sed命令的外部使用双引号。

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

它也适用于文件。

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

如果你在字符串中有单引号和双引号,那也没关系。只是逃避双引号。

例如,此文件包含带有单引号和双引号的字符串。我将使用sed添加单引号并删除一些双引号。

$ 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

1
投票

这有点荒谬,但我无法让\'sed 's/ones/one\'s/'工作。我正在考虑制作一个shell脚本,它会自动将import 'hammerjs';添加到我的带有Angular的src/main.ts文件中。

我做的工作是这样的:

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

所以对于上面的例子,它将是:

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

我不知道为什么\'不会单独工作,但它确实存在。


0
投票

我知道这听起来像是一个警察,但是当字符串中有单引号和双引号时,我永远无法使用sed。为了帮助像我这样有困难的任何新手,一个选择是分割字符串。我不得不替换100多个index.hmtl文件中的代码。字符串有单引号和双引号,所以我只是拆分字符串,用<!--替换第一个块,用-->替换第二个块。它使我的index.html文件搞得一团糟,但它确实有效。

© www.soinside.com 2019 - 2024. All rights reserved.