2012-02-02 21 views
1

次の例のsedコマンドの二重引用符を一重引用符で置き換えたいとします。一重引用符をエスケープする

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

私はエラーを取得する単一引用符と二重引用符を置き換える場合は、単一引用符をエスケープする方法はありますか?

私はsed忍者ではないので、これについてのどのようなヒントも高く評価されます。

+0

第2行にはコードだけでなく、あなたの質問を編集しようとしました。しかし、私は失敗しました:(説明とコードを別々の行に入れてください。 –

答えて

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の環境で必要とされると、 \ n ""シェルに入るのは "/"/"/"/g "です。すべての引用符は何ですか?非常に一般的な間違いは、コマンドラインでの引用がプログラミングと同じように機能すると考えることです。一重引用符で置換をオンまたはオフにします。したがって、最初の一重引用符は置換をオフにします。つまり、次の文字はテキストとして解釈され、特別な意味はありません(エスケープ文字を含む)。一重引用符をエスケープするには、代入をオンにする必要があります。一重引用符をエスケープして置換をもう一度オフにすることができます。

1

どの見積もりがsedによって解析されていて、sedを呼び出す環境によって解析されているかについて注意する必要があります。 sedの通常の呼び出しはシェルスクリプトに由来しますが、(あなたのタグに基づいて)AppleScriptから呼び出しているようです。あなたは

| 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 
'''''' 
関連する問題