2011-01-14 13 views
0

Ich möchte ein Skript bei der Veröffentlichung, die alle url() Deklarationen in einer CSS-Datei mit dem vollständigen Domain-Pfad ersetzt, weil Bilder in einem statischen Web gehostet werden Server.Ersetze URL() relativen Pfad mit voller Domäne in CSS-Dateien

Beispiel

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"); 

Ich habe einen Bash-Skript mit sed zusammengebraut genau das zu tun, aber es behandelt nicht url mit Zitaten url (‚‘) oder URLs, die bereits einen vollständigen Pfad haben.

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

Haben Sie diejenigen ignorieren möchten, die bereits den vollständigen Pfad haben? – SiegeX

+0

Ja, aber am wichtigsten muss ich in der Lage sein, die Fälle mit Einzel- und Doppelquoten zu verarbeiten. Die obigen Testfälle wurden aktualisiert. – deepwell

Antwort

4

Versuchen mit diesem

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

die Option -i nur legen, wenn Sie sicher sind, das Ergebnis ist das, was Sie gesucht waren.

+0

Entfernen Sie die 'URL (' im Ersatztext und Ill wechseln von -1 bis +1 – SiegeX

+0

Fertig! Danke;) – marco

+1

Update '\\ (URL ('\? \\)' zu '\\ (URL ([' \ "] \? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ' – SiegeX

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

wo der Darm verhindern wird, „http: // ...“ wie Urls

+0

Sie sollten den Kommentar hinzufügen, dass Sie GNU sed mit der Option '-r' benötigen, damit Ihre EREs funktionieren richtig – SiegeX

+0

Syntax Fehler in der Nähe von unerwarteten Token '(' – deepwell

+0

Sie müssen die Flucht", wenn Sie es im sed Befehl verwenden – Gerben