2012-02-02 113 views
1

我想用单引号替换以下示例中sed命令中的双引号。转义单引号

set new_string to do shell script "echo " & quoted form of list_string & " | sed -e 's/$/\"/' -e 's/^/\"/' -e 's/^/+/'" 

但是如果我换成单引号我得到一个错误的双引号,是有办法逃脱单引号?

我不是sed ninja,所以有关如何去解决这个问题的任何提示都非常感谢。

+0

我试着编辑你的问题,因为第二行似乎不仅包含代码。但是我失败了:(你能把解释和代码放在单独的行中吗? – 2012-02-02 12:17:40

回答

2

fYou有报价的故障。只是更换为单引号双引号,这就够了

set list_string to "This program said: \"Hello World!\"" 
set new_string to do shell script "/bin/echo -n " & quoted form of list_string & " | sed -e 's/\"/'\\''/g'" 

解释的/ \‘/‘\’‘/ G’

的\\和\’需要在AppleScript的环境和将会在shell和\“中。因此,进入shell的是'/'/'\''/ g'。那么所有的报价是什么?一个非常常见的错误是认为命令行上的引用与编程中的引用相同。单引号会打开或关闭替换。因此,第一个单引号将关闭替换,这意味着下一个字符将被解释为文本并且没有特殊含义(包括转义字符)。因此,为了避免单引号,我们需要打开替换,然后我们可以转义单引号并再次关闭替换。

1

您需要注意哪些引号正在被sed解析,哪些正在被调用sed的环境解析。 sed的正常调用来自shell脚本,但是(根据您的标记),您似乎是从AppleScript调用它的。

从一个shell脚本,你会说

| sed -e 's/$/'\''/' -e 's/^/'\''/' -e 's/^/+/' 

但我不知道是否SH-风格的转义规则生效,为您或您是否需要额外逃脱\

8

,如果你想用SED '更换"

sed 's/"/\x27/g' yourFile 


\x27 - single 
\x22 - double 

它可以使代码看起来更清洁,并用更少的逃脱。

看到测试:

kent$ cat quote.tmp 
"""""" 

kent$ sed 's/"/\x27/g' quote.tmp 
''''''