2012-07-03 9 views
5

文字列内のすべての単一引用符を、sedを使用して2つの単一引用符に置き換えたいとします。しかし、文字列に&が含まれている場合、sedコマンドはそれ以降の単一引用符を置き換えません。 これについていくつかご意見をお寄せください。sedを使用してエスケープする方法&

答えて

13

あなたは入力には何もをエスケープする必要はありません。

$ echo "123 ' foo & b'ar" | sed "s/'/''/g" 
123 '' foo & b''ar 

しかし、sコマンド&の「交換」部分には特別な意味を持っている:それは試合を」という意味します。必要に応じて、エスケープする必要のある他のすべてのように\

$ echo "123 ' foo & b'ar" | sed "s/'/&&/g" 
123 '' foo & b''ar 

エスケープそれを::上記のコマンドは以下のように書き換えることができる理由です

それはあなたが投稿した場合に答えるために簡単です
$ echo "123 ' foo & b'ar" | sed "s/'/'\&'/g" 
123 '&' foo & b'&'ar 
5

あなたのコードですが、私はアンパサンドをエスケープしていないと思います。リテラルアンパサンドを使用する場合は&\&に変更してください。

好奇心が強い場合は、The sed FAQの3.1.2節を参照してより詳細な説明をしてください。

+1

のために働いてねえ、私は '&'私の出力文字列内の文字列を置換します。私は、ウェブ上のさまざまな回答に基づいて ''& "、' \& '、' \\& '、' \\\& '、' "\& '" 'を試しましたが、 – Ava

+1

'\&'は私のために働きます。たとえば、 'sed" s/amp/\&/ g "'を使って 'amp'のすべてのインスタンスを '&'に置き換えることができます。それでも問題が解決しない場合は、入力文字列とコードで新しい質問を投稿する必要があります。 –

+1

そうです。私は変更を持っていない別のファイルを使用していた:( – Ava

0

それは私

bash>echo "'This is a string with 'single quote' & '&'" | sed "s/'/''/g" 
''This is a string with ''single quote'' & ''&'' 
関連する問題