Text aus Datei entfernen

Text aus Datei entfernen

Ich möchte etwas Text aus entfernen file1.txt.

Ich füge den Text in die Datei ein tmpund mache:

grep -f tmp file.txt

Aber es gibt mir nur den Unterschied.

Die Frage ist, wie man die Differenz beseitigt file.txt.

Antwort1

Dadurch grep -f tmp file.txtwerden alle Zeilen angezeigt, die das Wort enthalten text(vorausgesetzt, tmpes enthält nur das Wort text). Wenn Sie alle Zeilen anzeigen möchten, die das Wort text nicht enthalten, müssen Sie die -vOption zum Umkehren der Übereinstimmung verwenden:

$ grep -v 'text' file.txt

Wenn Sie alle Zeilen in der Datei drucken, aber nur alle Vorkommen von entfernen, textdann gilt:

$ sed 's/text//g' 

Antwort2

Wenn Sie Zeilen aus Ihrer Liste entfernen möchten file.txt, die die Zeile mit textdem Seed enthalten, können Sie Folgendes tun:

sed '/text/d' file.txt

oder

sed -n '/text/!p' file.txt

Antwort3

Was Sie tun möchten, ist

grep -Fvf tmp file.txt

Aus man grep:

   -f FILE, --file=FILE
          Obtain patterns from FILE, one per line.   The
          empty   file   contains   zero  patterns,  and
          therefore matches nothing.  (-f  is  specified
          by POSIX.)
   -F, --fixed-strings
          Interpret PATTERN as a list of fixed  strings,
          separated  by  newlines, any of which is to be
          matched.  (-F is specified by POSIX.)
   -v, --invert-match
          Invert  the  sense of matching, to select non-
          matching lines.  (-v is specified by POSIX.)

Also, -fweist an grep, die Liste der Muster zu lesen, nach denen es in einer Datei sucht. -Fist erforderlich grep, damit diese Muster nicht als reguläre Ausdrücke interpretiert werden. Bei einer Zeichenfolge wie wird also foo.barals .Literalwert .und nicht als „entspricht jedem Zeichen“ verstanden. Schließlich -vkehrt die Übereinstimmung um, damit grepnur die Zeilen gedruckt werden, die keinem der Muster in entsprechen tmp. Beispiel:

$ cat pats 
aa
bb
cc
$ cat file.txt 
This line has aa
This one contains bb
This one contains none of the patterns
This one contains cc
$ grep -Fvf pats file.txt 
This one contains none of the patterns

Antwort4

Was ich mache ist:

sed '/text_to_delete/d' filename | sponge filename

Dadurch wird die Änderung an der Quelldatei vorgenommen.

verwandte Informationen