So verwenden Sie sed, um eine ganze Zeile durch eine andere mit darin enthaltenen Zeichen zu ersetzen

So verwenden Sie sed, um eine ganze Zeile durch eine andere mit darin enthaltenen Zeichen zu ersetzen

Die Datei enthält in Zeile 19 Folgendes

send -- "[email protected]\r"

Ich möchte die E-Mail ändern, also habe ich nachgedacht und mir das ausgedacht

sed -i.bak '19s/.*/send -- "[email protected]\r"/' ./a

es ändert Zeile 19, aber was ich bekomme ist

"end -- "[email protected]

Was läuft schief und wie kann ich es beheben?

Antwort1

Der Backslash ist das Escape-Zeichen in sedMustern, daherwörtlichWagenrücklauf wird eingefügt. Was Sie wollen, ist \\r- ein maskierter Backslash, gefolgt von einem Literal r.

Antwort2

Anstatt eine Suche und Ersetzung durchzuführen, können Sie einfach die 19. Zeile ändern:

sed '19c\send -- "[email protected]\\r"'

Antwort3

Sie machen es unnötig kompliziert – ändern Sie einfach die E-Mail-Adresse, nicht die ganze Zeile. Zur Veranschaulichung:

$ echo 'send -- "[email protected]\r"'  | sed 's/old@example\.com/[email protected]/'
send -- "[email protected]\r"

Übrigens können Sie optional den gModifikator (global) am Ende des Befehls verwenden s///, wenn das Suchmuster mehr als einmal in einer Zeile vorkommen könnte, und/oder den iModifikator (Groß-/Kleinschreibung ignorieren), wenn Sie bei der Suche die Groß-/Kleinschreibung nicht berücksichtigen möchten – z. B. um beides zu verwenden: .s/old@example\.com/[email protected]/ig

Ihr Befehl würde dann jedenfalls folgendermaßen aussehen:

sed -i.bak '19s/old@example\.com/[email protected]/' ./a

Wenn Sie die genaue zu ändernde Zeilennummer nicht kennen, geben Sie als Zeilenadresse statt einer Zeilennummer einen regulären Ausdruck an:

sed -i.bak '/^send.*old@example\.com/ s/old@example\.com/[email protected]/' ./a

Noch einfacher ist es, ALLE Vorkommen von[email geschützt]Geben Sie in der Datei einfach keine Adresse an. Die Ersetzung erfolgt dann in jeder Zeile der Datei.

sed -i.bak 's/old@example\.com/[email protected]/' ./a

verwandte Informationen