转义单引号

时间:2012-02-02 12:15:37

标签: sed applescript

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

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

但是,如果我用单引号替换双引号,我会收到错误,有没有办法逃避单引号?

我不是一个忍者,所以任何有关如何解决这个问题的提示都受到高度赞赏。

3 个答案:

答案 0 :(得分:8)

如果您想使用sed:

"替换为'
sed 's/"/\x27/g' yourFile


\x27 - single
\x22 - double

它可以使代码看起来更干净,并且减少了逃避。

看测试:

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

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

答案 1 :(得分:2)

你有报价错误吗?只需要替换单引号的双引号,这就足够了

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'"

解释's / \“/'\''/ g'

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

答案 2 :(得分:1)

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

从shell脚本中你会说

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

但我不知道sh式转义规则是否对您有效,或者您是否需要另外转义\