&
texファイルでbyを置き換えるためにsedを使用しようとしています。\&
を使用していますsed -i "s/ & / \\\& /g" bibfile.bib;
。ただし、ファイルの結果が予想したものとは\ &
異なります。\&
どんな助けでも歓迎します、マーク
ベストアンサー1
Bourneのようなシェルで二重引用符を使用することは、行の連続で\
二重引用符の中にエスケープし`
、"
それ自体を使用するのと同じように、バックスラッシュのために追加のエスケープレイヤーが必要であることを意味します。$
代わりに一重引用符を使用してください。
'...'
参照演算子としてのシェルサポートも一部のサポートよりも優れています"..."
。
だから:
sed -i 's/ & / \\\& /g' bibfile.bib
sed
sed
、-i
およびs/ & / \\\& /g
4つの別々の引数として呼び出されますbibfile.bib
。
二重引用符を使用して同じパラメータを送信するには、少なくとも次のものが必要です。
sed -i "s/ & / \\\\\&" bibfile.bib
最初の2つのペアは\
1つになり、\
そのまま\&
残ります\&
。
sed -i "s/ & / \\\\\\&" bibfile.bib
sed
IMOも機能し、3つのバックスラッシュを二重引用符内に挿入して渡すことがよりきれいで明確です\\
。
次のようにすることもできます。
sed -i 's/ \(& \)/ \\\1/g' bibfile.bib
または:
sed -Ei 's/ (& )/ \\\1/g' bibfile.bib
あなたの:
sed -i 's/ & / \\\& /g' bibfile.bib
実際にsed
、-i
およびs/ & / \\& /g
をbibfile.bib
引数として渡すと、接頭辞と接尾辞として解釈されますsed
。" & "
" \"
" "
完全性のために、他のシェルは次のことを行います。
csh/tcsh
csh / tcshには\
norに関する特別な内容はありません(歴史的な拡張のためにエスケープする以外)。'...'
"..."
!
だからそこで働きますsed -i "s/ & / \\\& /g" bibfile.bib
。sed -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
\\
\&
&