sedを使用した条件付き置換?

sedを使用した条件付き置換?

交換してsedいますurl(\'test.png\')url(\'/navigation/test.png\')

このコマンドを使用するとうまく動作します

sed -i "s#url(\\\'#url(\\\'/navigation/#g" "main.js"

/ しかし、すでに次に始まるURLステートメントを除外したいと思います。url(\'/favicon.png\')

可能ですかsed

答え1

鍵となるのは、正規表現でより多くのコンテキストを提供することです。

sed -e "s#\\(url(\\\\'\\)\\(test.png\\\\')\\)#\1/navigation/\2#g"

また注:

  • 二重引用符の中には'特別なものはありません。
  • \\二重引用符の中に\

答え2

これを使用して、[^/]スラッシュを除くすべての文字をurl(\'[^/]コマンドのパターンに一致させることができますs。これはもちろん最初の文字を破壊するので、\([^/]\)置換から保存できるようにサブ式を作成する必要があります。\1

sed -i "s#url(\\\'\\([^/]\\)#url(\\\'/navigation/\\1#g" "main.js"

もう一つの試みは常に交換することですが、すでにスラッシュがある場合は元に戻すことです。

sed -i "s#url(\\\'#url(\\\'/navigation/#g;s#navigation//##g" "main.js"

関連情報