2012-02-02 74 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 
''''''