1

URL を新しいドメインに置き換える次の CSSbackground-imageルールがあります (Cookie のないドメイン経由で画像を読み込むため)。

  1. background-image : url(/image/test.png);
  2. background-image : url("/image/test.png");
  3. background-image : url('/image/test.png');

前に引用符をキャッチして、URL を次の式/imageに正しく置き換えることができます。sed

local someVar=123
local replace='url\("\/\/img.mydomain.com\/'"$someVar"'\1\")'
sed -E 's,url\(.(.+).\),'"$replace"',g' file.css

スニペット

url\(.

URL 文字列の引用符 (一重または二重) を処理します。しかし、引用符が存在しない場合 (上記の最初の例)、正規表現は明らかに失敗します。これを確認するための正しい正規表現は何でしょうか?

次のことを試しましたが、うまくいきません。

local someVar=123
local replace='url\("\/\/img.mydomain.com\/'"$someVar"'\1\")'
sed -E 's,url\((\'|\")(.+)(\'|\")\),'"$replace"',g' file.css

エラーがスローされるだけです:syntax error near unexpected token `)'

4

3 に答える 3

3

このsedを使用できます:

local someVar=123
local replace='\1\2//img.mydomain.com/'"$someVar"'\3\4'

Linux では、次の sed コマンドを使用します。

sed -r "s~(url\()(['\"]?)(.*)$2(\);)~$replace~" file.css

OSX では、次の sed コマンドを使用します。

sed -E "s~(url\()(['\"]?)(.*)$2(\);)~$replace~" file.css

出力:

background-image : url(//img.mydomain.com/123/image/test.png);
background-image : url("//img.mydomain.com/123/image/test.png");
background-image : url('//img.mydomain.com/123/image/test.png');
于 2013-09-02T09:56:34.093 に答える
2

この回答 ( sed で一重引用符を一致させる方法) によると、別の一重引用符のペアを使用する必要があります。

local someVar=123
local replace='url\("\/\/img.mydomain.com\/'"$someVar"'\1\")'
sed -E 's,url\(('\''|\")(.+)('\''|\")\),'"$replace"',g' file.css

読みやすくするために、括弧の代わりに角括弧を使用できます。エスケープせずに二重引用符を配置することもできます。

sed -E 's,url\(['\''"]?([^'\'']+)['\''"]?\),'"$replace"',g' file.css
于 2013-09-02T07:43:34.653 に答える