如何在已被引号包围的sed表达式中转义单个引号?
例如:
sed 's/ones/one's/' <<< 'ones thing'
如何在已被引号包围的sed表达式中转义单个引号?
例如:
sed 's/ones/one's/' <<< 'ones thing'
Answers:
sed
带双引号的报价代码:
$ sed "s/ones/one's/"<<<"ones thing"
one's thing
我不喜欢用数百个反斜杠来转义代码,这很伤我的眼睛。通常我是这样做的:
$ sed 's/ones/one\x27s/'<<<"ones thing"
one's thing
sed -i
任何特定原因?
一种技巧是使用相邻字符串的外壳程序字符串串联,并使用外壳程序转义对嵌入式引号进行转义:
sed 's/ones/two'\''s/' <<< 'ones thing'
two's thing
sed表达式中有3个字符串,然后外壳将它们缝合在一起:
sed 's/ones/two'
\'
's/'
希望对别人有帮助!
sed 's/ones/two''s/' <<< 'ones thing'
不,输出twos thing
。'
在输出中缺少。您必须按照此答案中所述的方法进行操作。
最好的方法是使用 $'some string with \' quotes \''
例如:
sed $'s/ones/two\'s/' <<< 'ones thing'
$'string'
是特定于Bash的,因此它不能移植到POSIX shell中。
bash
具体说明。它也可以在ksh
和中使用zsh
,但是可以,它是POSIX的扩展,如果您不编写可移植的脚本,这很好。唯一的缺点是您还必须转义使用其他反斜杠。
只需在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
这是一种荒谬的,但我无法得到\'
的sed 's/ones/one\'s/'
工作。我一直在寻找一个shell脚本,它将通过Angular自动添加import 'hammerjs';
到我的src/main.ts
文件中。
我上班的确是这样的:
apost=\'
sed -i '' '/environments/a\
import '$apost'hammerjs'$apost';' src/main.ts
因此,对于上面的示例,它将是:
apost=\'
sed 's/ones/one'$apost's/'
我不知道为什么\'
不能单独工作,但是确实存在。