43

式が一重引用符で囲まれている場合、sed で一重引用符を一致させる方法:

sed -e '...'

たとえば、次のテキストを一致させる必要があります。

'foo'
4

4 に答える 4

54

次のいずれかを使用できます。

"texta'textb" (APOSTROPHE inside QUOTATION MARKs)

また

'texta'\''textb' (APOSTROPHE text APOSTROPHE, then REVERSE SOLIDUS, APOSTROPHE, then APOSTROPHE more text APOSTROPHE)

Unicode文字名を使用しました。REVERSE SOLIDUSは、より一般的にはバックスラッシュとして知られています。

後者の場合、アポストロフィを閉じてから、バックスラッシュを使用してアポストロフィをシェルクォートし、残りのテキストに対して別のアポストロフィを開きます。

于 2008-09-18T09:24:12.817 に答える
46

質問へのコメントで述べたように、実際には sed に関するものではなく、シェル (bash など) の引用符で囲まれた文字列に引用符を含める方法についてです。

以前の回答を明確にするために、バックスラッシュで引用符をエスケープする必要がありますが、単一引用符で囲まれた式内ではそれを行うことはできません。bash の man ページから:

文字を一重引用符で囲むと、引用符内の各文字のリテラル値が保持されます。バックスラッシュが前にある場合でも、単一引用符の間に単一引用符が出現しない場合があります。

したがって、引用された式を終了し、エスケープされた引用を挿入し、新しい引用された式を開始する必要があります。シェルの引用符の削除では余分なスペースが追加されないため、実質的に文字列連結が得られます。

したがって、「foo」という式をシングル クォーテーションで囲む方法に関する元の質問に答えるには、次のようにします。

sed -e '...'\''foo'\''...'

(「...」は sed 式の残りの部分です)。

全体として、読みやすさのために、可能であれば周囲の引用符を二重引用符に変更する方がはるかに優れています。

sed -e "...'foo'..."

[最初の (単一引用符) アプローチの潜在的なメンテナンスの悪夢の例として、StackOverflow の構文の強調表示が引用符、バックスラッシュ、およびその他のテキストにどのように色付けされているかに注意してください。これは間違いなく正しくありません。]

于 2008-10-16T00:05:12.603 に答える