質問

式が一重引用符で囲まれている場合に、sed で一重引用符を照合する方法:

sed -e '...'

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

'foo'
役に立ちましたか?

解決

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

"texta'textb" (APOSTROPHE inside QUOTATION MARKs)

または

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

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

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

他のヒント

質問へのコメントに記載されているように、実際には sed に関するものではなく、シェル内の引用符で囲まれた文字列に引用符を含める方法 (例:バッシュ)。

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

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

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

したがって、式「foo」を単一引用符で囲む方法という元の質問に答えるには、次のようにします。

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

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

全体として、読みやすくするために、可能であれば周囲の引用符を二重引用符に変更することをお勧めします。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top