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