15

sed を使用して、文字列内のすべての一重引用符を 2 つの一重引用符に置き換えたいと考えています。ただし、文字列に文字が含まれて&いる場合、sed コマンドはその後に続く単一引用符を置き換えません。&文字の後の単一引用符がまだ置き換えられるように、文字をエスケープするにはどうすればよいですか?

4

3 に答える 3

27

入力で何もエスケープする必要はありません:

$ 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
于 2012-07-03T09:13:49.590 に答える
12

コードを投稿すると答えやすくなりますが、アンパサンドをエスケープしていないと思います。リテラルのアンパサンドが必要な場合はに変更&します。\&

興味があれば、より詳細な説明については、The sed FAQ のセクション 3.1.2 を参照してください。

于 2012-07-03T09:14:18.840 に答える
0

それは私のために働いています

bash>echo "'This is a string with 'single quote' & '&'" | sed "s/'/''/g"
''This is a string with ''single quote'' & ''&''
于 2012-07-03T12:01:56.443 に答える