2014-11-04 87 views
0

我想搜索由位置参数给出的用双引号括起来的字符串。这是我做了什么:在sed中的单引号内使用双引号内的变量

#!/bin/bash 

    FOO=$0 

    sed -i 's/"${FOO}"/bar/m' file.txt 

无论"$FOO"也不\"a${FOO}\"/工作。

我知道,要扩大变量,你必须把整个正则表达式用双引号括起来(sed substitution with bash variables)。问题是我搜索的字符串也用双引号括起来,这就是为什么我把整个正则表达式用单引号括起来的原因。我也试图把它用双引号括起来,并且转义双引号,但它不起作用。

对单引号和双引号转义逻辑的解释是非常有用的。

回答

1

使用双引号引用sed的命令,

sed -i "s/\"${FOO}\"/bar/m" file.txt

测试:

$ echo $b 
hello 
$ echo \"hello\" | sed "s/\"$b\"/asdf/" 
asdf 
+0

请问这场比赛为 “foo”(包括引号),如果位置参数为 “富”(没有引号)? – Federico 2014-11-04 19:53:40

+0

对不起,我没有让你 – nu11p01n73R 2014-11-04 19:58:48

+0

我想要搜索:“blaba”,而不是blabla。我期望传递给脚本的字符串不会被括在双引号中,但我必须找到的文本是。 – Federico 2014-11-04 20:15:10