用css文件中的完整域替换url()相对路径

时间:2011-01-14 19:18:16

标签: css bash sed

我想在发布时运行一个脚本,用一个完整的域路径替换css文件中的所有url()声明,因为图像托管在静态Web服务器上。

实施例

Current:  background-image: url(/images/menu.gif);
Desired:  background-image: url(http://example.com/images/menu.gif);
Current:  background-image: url('/images/menu.gif');
Desired:  background-image: url('http://example.com/images/menu.gif');
Current:  background-image: url("/images/menu.gif");
Desired:  background-image: url("http://example.com/images/menu.gif");

我使用sed编写了一个bash脚本来执行此操作,但它不会使用引号url('')或已经有完整路径的url来处理url。

 STATIC_HOST="http://example.com"
 sed -i '' "s|url(\([^)]*\)|url($STATIC_HOST\1|g" main.css

2 个答案:

答案 0 :(得分:4)

试试这个

sed "s|\(url(['\"]\?\)\(/[^)]*\)|\1$STATIC_HOST\2|g" main.css

只有在确定结果与您相符时才设置-i选项 寻找。

答案 1 :(得分:0)

|url\(['\"]?([^'\":)]+)['\"]?\)|url($STATIC_HOST\1)|g

冒号将阻止“http:// ...”,如网址