Bash - finde ein Schlüsselwort in einer Datei und lösche seine Zeile [duplizieren]

9

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 :

%Vor%

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.

Roger 13.08.2011, 13:34
quelle

3 Antworten

13

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.

    
miku 13.08.2011, 13:42
quelle
5

Bringe es in eine andere Datei, nicht die gleiche, von der du liest, und sei vorsichtig mit der nutzlosen Verwendung von cat .

%Vor%

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.

    
sidyll 13.08.2011 13:37
quelle
1

Wenn Sie nur die letzte Zeile Ihrer Beispieldatei löschen möchten

%Vor%     
Dotti 13.08.2011 16:11
quelle