1. ホーム
  2. bash

[解決済み] sed で二重引用符と単一引用符をエスケープするにはどうしたらいいですか?

2022-02-10 23:32:13

質問

私が調べたところでは、シングルクォートを使用した場合、中のものはすべてリテラルとみなされるようです。私はそれを代入に使いたいのです。しかし、私はシングルクォートまたはダブルクォートを持つ文字列を見つけたいのです。

例えば

sed -i 's/"http://www.fubar.com"/URL_FUBAR/g'

"http://www.fubar.com"をURL_FUBARに置き換えたいのですが、どうすればいいですか?sedはどのように私の//や二重引用符を認識することになっているのでしょうか?

ありがとうございました。

EDITです。 を使用できますか? s/\"http\:\/\/www\.fubar\.\com\"/URL_FUBAR/g ?

シングルクォートの中の文字がエスケープされるのですか?

どのように解決するのですか?

その s/// コマンドを sed の代わりに他の文字を使用することができます。 / のようにデリミタとして使用します。

sed 's#"http://www\.fubar\.com"#URL_FUBAR#g'

または

sed 's,"http://www\.fubar\.com",URL_FUBAR,g'

ダブルクォーテーションは問題ありません。 一重引用符にマッチする場合は、2種類の引用符を入れ替えてください。シングルクォートされた文字列は、シングルクォートを含むことができないことに注意してください(エスケープされたものでさえも含むことができません)。

の場合、ドットをエスケープする必要があります。 sed を正規表現パターンとしてではなく、リテラルなドットとして解釈します。 . のように、任意の1文字にマッチします。