Frage: Ich möchte einen Text durch einen Link im Anchor-Tag einer HTML-Datei ersetzen. Die Herausforderung besteht darin, dass das Projekt Hunderte solcher HTML-Dateien enthält und das manuelle Ersetzen eines Textes in all diesen Dateien keine kluge Methode ist. Die Frage ist also, wie kann ich dasselbe mit einem einzigen Befehl unter Linux tun?
Lösung:
Mit sed Befehl unter Linux:
sed -i 's/#\(.*logo\)/domain.ca\1/' $file
Der obige Befehl sucht nach der Zeile, die das Muster logo enthält und ersetzt „#“ durch einen Link (z. B. eine domain.ca)
Sie können auch mehrere Dateien für den obigen Befehl übergeben, wie unten gezeigt.
Eine andere Variation des obigen Befehls ist:
sed -i '/logo.png/ s/#/domain.ca/' *.html
Mit perl Befehl:
perl -i -pe 's/#/domain.ca/ if /logo.png/' about-us.html
Der Befehl ist sehr einfach – durchsuchen Sie den Text und ersetzen Sie ihn durch eine bestimmte Zeichenfolge, wenn und nur wenn er eine übereinstimmende Zeichenfolge in dieser Zeile der Datei findet.
Alle obigen Befehle haben die gleiche Aufgabe, aber sie unterscheiden sich nur darin, wie Sie Ihren regulären Ausdruck eingeben.
Verwenden Sie Vim in ex Modus (kann nicht mit mehreren Dateien verwendet werden):
ex -sc '/logo/s/#/http:\/\/domain.ca\//|x' about-us.html
Im obigen Befehl wird der reguläre Ausdruck „/logo/s/#/http:\/\/domain.ca\//|x ‘ besteht aus ‘s’ und ‘x’ – wobei ‘s’ für ersetzen und ‘x’ für Speichern und Schließen der Datei steht.
Hinweis:Der obige Befehl verwendet vim , Sie können nicht mehrere Dateien übergeben. Sie müssen diesen Befehl für jede zu ersetzende Datei manuell ausführen.