1. ホーム
  2. bash

[解決済み] sedでスラッシュや二重引用符、一重引用符をエスケープするには?

2023-03-25 18:02:34

質問

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

たとえば

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 がドットを正規表現パターンとしてではなく、 リテラルのドットとして解釈するのであれば、ドットはエスケープする必要があります。 . のように解釈することです。