我希望将以下示例中sed命令中的双引号替换为单引号。
set new_string to do shell script "echo " & quoted form of list_string & " | sed -e 's/$/\"/' -e 's/^/\"/' -e 's/^/+/'"但是,如果我将双引号替换为单引号,我会得到一个错误,有没有办法转义单引号?
我不是sed忍者,所以任何关于如何做的提示都是非常感谢的。
发布于 2012-02-02 20:32:00
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'"解释“%s/\”/‘\’‘/g’
\和\“在applescript环境中是必需的,并且将位于shell中。那么进入shell的是‘s/“/’\‘/g’。那么所有的引号是什么?一个非常常见的错误是认为命令行上的引号和编程中的引号一样。单引号打开或关闭替换。所以第一个单引号关闭替换,这意味着下一个字符将被解释为文本,没有特殊含义(包括转义字符)。因此,要转义单引号,我们需要打开替换,然后我们可以转义单引号,然后再次关闭替换。
发布于 2012-02-02 20:26:59
如果您想使用sed将"替换为':
sed 's/"/\x27/g' yourFile
\x27 - single
\x22 - double它可以使代码看起来更干净,转义更少。
请参阅测试:
kent$ cat quote.tmp
""""""
kent$ sed 's/"/\x27/g' quote.tmp
''''''发布于 2012-02-02 20:25:48
您需要注意哪些引号由sed解析,哪些引号由调用sed的环境解析。正常的sed调用来自AppleScript脚本,但是(根据您的标记)您似乎是从shell调用它。
在shell脚本中,您可能会这样说
| sed -e 's/$/'\''/' -e 's/^/'\''/' -e 's/^/+/'但是我不知道sh样式的转义规则是否对您有效,或者您是否需要另外转义\
https://stackoverflow.com/questions/9112157
复制相似问题