Vim: Ersetzen Sie alle Zeilen beginnend mit Zeichenfolge durch Zeile

9

Zu diesem Text

hardware mac 33:33:333:33:33
hardware mac 33:13:333:33:33
hardware mac 33:23:333:23:34
hardware mac 33:033:133:33:35
...

Ich möchte alle Zeilen, die mit Hardware Mac beginnen, durch ersetzen

hardware mac 00:00:00:00:00:00

Ich habe versucht

sed s/^hardware mac/hardware mac 00:00:00:00:00:00/gc

und Fehler geben

auch der klassische vim befehl

%s:/^hardware mac/hardware mac 00:00:00:00:00:00/gc

Ändern Sie jedoch nur den String-Hardware-Mac und lassen Sie die Zahlen unberührt. Wie ersetze ich einen String, der mit dem Hardware-Mac beginnt, durch meinen String?

Elbarna
quelle

Antworten:

14

Du hast es fast richtig gemacht, du hast nur vergessen, den Rest der Zeile (on vim) abzugleichen :

:%s/^hardware mac.*/hardware mac 00:00:00:00:00:00/gc

Sie können die gcOptionen am Ende löschen, wenn Sie sicher sind, was Sie tun. Dies gist wahrscheinlich unnötig, da Sie nicht mehr als einmal pro Zeile übereinstimmen.

Damit sedist das gleiche:

sed -i 's/^hardware mac.*/hardware mac 00:00:00:00:00:00/' filename

Beachten Sie, dass sedder Substitutionsbefehl skein c(Bestätigungs-) Flag akzeptiert , wie dies der vimFall ist.

Kira
quelle
+1 FWIW die gin /gcist überflüssig, da diese Regex nur eine pro Zeile sowieso mithalten können.
Sparhawk
Ich habe meine Antwort bearbeitet, während Sie diesen Kommentar geschrieben haben (=
Kira
Beachten Sie, dass diese sedSyntax im GNU-Stil ist. Nicht alle Versionen unterstützen -iund einige erfordern ein Argument dafür.
Eric Renouf