sedを使用して特殊文字を挿入するソリューション

sedを使用して特殊文字を挿入するソリューション

&texファイルでbyを置き換えるためにsedを使用しようとしています。\&を使用していますsed -i "s/ & / \\\& /g" bibfile.bib; 。ただし、ファイルの結果が予想したものとは\ &異なります。\&どんな助けでも歓迎します、マーク

ベストアンサー1

Bourneのようなシェルで二重引用符を使用することは、行の連続で\二重引用符の中にエスケープし`"それ自体を使用するのと同じように、バックスラッシュのために追加のエスケープレイヤーが必要であることを意味します。$

代わりに一重引用符を使用してください。

'...'参照演算子としてのシェルサポートも一部のサポートよりも優れています"..."

だから:

sed -i 's/ & / \\\& /g' bibfile.bib

sedsed-iおよびs/ & / \\\& /g4つの別々の引数として呼び出されますbibfile.bib

二重引用符を使用して同じパラメータを送信するには、少なくとも次のものが必要です。

sed -i "s/ & / \\\\\&" bibfile.bib

最初の2つのペアは\1つになり、\そのまま\&残ります\&

sed -i "s/ & / \\\\\\&" bibfile.bib

sedIMOも機能し、3つのバックスラッシュを二重引用符内に挿入して渡すことがよりきれいで明確です\\

次のようにすることもできます。

sed -i 's/ \(& \)/ \\\1/g' bibfile.bib

または:

sed -Ei 's/ (& )/ \\\1/g' bibfile.bib

あなたの:

sed -i 's/ & / \\\& /g' bibfile.bib

実際にsed-iおよびs/ & / \\& /gbibfile.bib引数として渡すと、接頭辞と接尾辞として解釈されますsed" & "" \"" "


完全性のために、他のシェルは次のことを行います。

csh/tcsh

csh / tcshには\norに関する特別な内容はありません(歴史的な拡張のためにエスケープする以外)。'...'"..."!

だからそこで働きますsed -i "s/ & / \\\& /g" bibfile.bibsed -i 's/ & / \\\& /g' bibfile.bib

魚の場合は\内部も特別なので、'...'以下が必要です。

sed -i "s/ & / \\\\\\& /g" bibfile.bib

または

sed -i 's/ & / \\\\\\& /g' bibfile.bib

通常、エスケープする必要がある文字数が少ないため、後者は依然として優先されます。

RC

rcには1つの参照形式しかありません:('...'not "..."\nornornor)$'...'$"..."

sed -i 's/ & / \\\& /g' bibfile.bib

そこだけ。

バラよりUnixシェルで通常の文字などの特殊文字を使用する方法は?どの文字が特別なのか、さまざまなシェルでその文字をエスケープ/引用する方法の詳細についてです。


の場合、そのコマンドの代替部分では、銀のsed内容と一致するように拡張される特別な意味ではなく、バックスラッシュとリテラルとして解釈されます。s/pattern/replacement/flags\\\&&

おすすめ記事