2010-11-23 31 views
3

ich will alle Links in HTML-Datei ändern, wie dieseURL ersetzen mit sed

s/ <a[^>]* href="[^"]*\// <a href="\http:\/\/www.someurl.com\//g 

sed verwenden, aber es funktioniert nicht.

Meine Links:

<a href="http://www.mylink.com/help/rss.php" target="_top" title="RSS">RSS</a></div> 

nur mein Skript Änderung nur auf someurl.com/help/rss.php mylink.com/help/rss.php

I someurl.com ändern müssen

+0

Die Regex funktioniert so, wie ich es erwarten würde. Wie erwartest du das Ergebnis? –

Antwort

0

Sie haben es mit \/ beendet, was bedeutet, dass es bis zum letzten Schrägstrich gehen wird. Entfernen Sie die hinteren \/ und es wird funktionieren:

$ echo ' <a href="http://www.mylink.com/help/rss.php" target="_top" title="RSS">RSS</a></div>' \ 
> | sed 's/ <a[^>]* href="[^"]*/ <a href="\http:\/\/www.someurl.com\//g' 
<a href="http://www.someurl.com/" target="_top" title="RSS">RSS</a></div> 

Oder ediert im Einklang mit Dennis weiser Vorschlag über die Trennzeichen (noch mit den / am Ende des Suchmusters zu entfernen, offensichtlichen jetzt):

$ echo '<a href="http://www.mylink.com/help/rss.php" target="_top" title="RSS">RSS</a></div>' \ 
> | sed 's|<a[^>]* href="[^"]*|<a href="http://www.someurl.com/|g' 
<a href="http://www.someurl.com/" target="_top" title="RSS">RSS</a></div> 
6

den Raum nach dem ersten Schrägstrich herausnehmen, ändern alle sed in ein anderes Zeichen Schrägstriche wie | für Lesbarkeit und entfernen Sie alle die Flucht aus der URL zerschneidet.

sed 's|<a[^>]* href="[^"]*/|<a href="http://www.someurl.com/|g'