我想用以下单引号替换以下示例中的sed命令中的双引号。
set new_string to do shell script "echo " & quoted form of list_string & " | sed -e 's/$/\"/' -e 's/^/\"/' -e 's/^/+/'"
但是,如果我用单引号替换双引号,我会收到错误,有没有办法逃避单引号?
我不是一个忍者,所以任何有关如何解决这个问题的提示都受到高度赞赏。
答案 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式转义规则是否对您有效,或者您是否需要另外转义\