
Ich möchte etwas Text aus entfernen file1.txt
.
Ich füge den Text in die Datei ein tmp
und 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.txt
werden alle Zeilen angezeigt, die das Wort enthalten text
(vorausgesetzt, tmp
es enthält nur das Wort text
). Wenn Sie alle Zeilen anzeigen möchten, die das Wort text nicht enthalten, müssen Sie die -v
Option zum Umkehren der Übereinstimmung verwenden:
$ grep -v 'text' file.txt
Wenn Sie alle Zeilen in der Datei drucken, aber nur alle Vorkommen von entfernen, text
dann gilt:
$ sed 's/text//g'
Antwort2
Wenn Sie Zeilen aus Ihrer Liste entfernen möchten file.txt
, die die Zeile mit text
dem 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, -f
weist an grep
, die Liste der Muster zu lesen, nach denen es in einer Datei sucht. -F
ist erforderlich grep
, damit diese Muster nicht als reguläre Ausdrücke interpretiert werden. Bei einer Zeichenfolge wie wird also foo.bar
als .
Literalwert .
und nicht als „entspricht jedem Zeichen“ verstanden. Schließlich -v
kehrt die Übereinstimmung um, damit grep
nur 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.