我想用單引號替換以下示例中sed命令中的雙引號。轉義單引號
set new_string to do shell script "echo " & quoted form of list_string & " | sed -e 's/$/\"/' -e 's/^/\"/' -e 's/^/+/'"
但是如果我換成單引號我得到一個錯誤的雙引號,是有辦法逃脫單引號?
我不是sed ninja,所以有關如何去解決這個問題的任何提示都非常感謝。
我想用單引號替換以下示例中sed命令中的雙引號。轉義單引號
set new_string to do shell script "echo " & quoted form of list_string & " | sed -e 's/$/\"/' -e 's/^/\"/' -e 's/^/+/'"
但是如果我換成單引號我得到一個錯誤的雙引號,是有辦法逃脫單引號?
我不是sed ninja,所以有關如何去解決這個問題的任何提示都非常感謝。
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'。那麼所有的報價是什麼?一個非常常見的錯誤是認爲命令行上的引用與編程中的引用相同。單引號會打開或關閉替換。因此,第一個單引號將關閉替換,這意味着下一個字符將被解釋爲文本並且沒有特殊含義(包括轉義字符)。因此,爲了避免單引號,我們需要打開替換,然後我們可以轉義單引號並再次關閉替換。
您需要注意哪些引號正在被sed
解析,哪些正在被調用sed
的環境解析。 sed
的正常調用來自shell腳本,但是(根據您的標記),您似乎是從AppleScript調用它的。
從一個shell腳本,你會說
| sed -e 's/$/'\''/' -e 's/^/'\''/' -e 's/^/+/'
但我不知道是否SH-風格的轉義規則生效,爲您或您是否需要額外逃脫\
,如果你想用SED '
更換"
:
sed 's/"/\x27/g' yourFile
\x27 - single
\x22 - double
它可以使代碼看起來更清潔,並用更少的逃脫。
看到測試:
kent$ cat quote.tmp
""""""
kent$ sed 's/"/\x27/g' quote.tmp
''''''
我試着編輯你的問題,因爲第二行似乎不僅包含代碼。但是我失敗了:(你能把解釋和代碼放在單獨的行中嗎? – 2012-02-02 12:17:40