Ich möchte ein Schlüsselwort angeben, finde die Zeile, in der dieses Schlüsselwort in einer Datei erscheint und lösche die gesamte Zeile.
Das habe ich bekommen, aber es funktioniert nicht so wie es sollte:
%Vor%AKTUALISIEREN
Das hat bei mir funktioniert:
sed -i_bak -e '/domain\.com/d' /etc/hosts
Da ich jedoch zwei Zeilen mit "domain.com" hatte, gibt es eine Möglichkeit, sed zu sagen, dass nur die Zeile gelöscht werden soll, in der das genaue Keyword "domain.com" angezeigt wird
Dies ist der ursprüngliche Inhalt von / etc / hosts:
%Vor% So kommt es nach dem Befehl sed -i_bak -e '/domain\.com/d' /etc/hosts
:
Ich habe sed -i_bak -e '/\<namourphoto\.com\.br\>/d' ~/Desktop/hosts
versucht, aber es hat nicht funktioniert.
SCHLUSSFOLGERUNG
Dies ist der Code, den ich mir ausgedacht habe (basierend auf der Hilfe, die die feinen Leute mir gegeben haben):
%Vor%Beachten Sie Folgendes:
Ich zähle, dass es immer einen Tab vor der zu löschenden Domain gibt
Ich entkomme automatisch den Punkten des Domain-Namens.
Verwenden Sie den Stream-Editor , sed:
%Vor%Das obige wird Zeilen löschen, die culpa in test.txt enthalten. Es erstellt eine Sicherungskopie des Originals (namens test.txt.bak) und modifiziert die ursprüngliche Datei direkt.
Bringe es in eine andere Datei, nicht die gleiche, von der du liest, und sei vorsichtig mit der nutzlosen Verwendung von cat
.
Abgesehen von der feinen Antwort in Bezug auf sed, können Sie auch Perl und ein wenig verbesserte Regex verwenden, um das Problem zu lösen:
%Vor% Beachten Sie, dass domain.com
durch Leerzeichen (Tabulatoren oder Leerzeichen usw.) isoliert wird und hinter dem Zeilenumbruch nichts als null oder mehr Leerzeichen erscheint. Ähnlich wie -i
in sed, legt % -i.old
in Perl die Variable $^I
fest, und Ihre ursprüngliche Datei erhält die Änderungen, während eine Kopie unter dem alten Namen und einem .old
angehängt bleibt.
Tags und Links bash grep sed replace command-line-interface