Wie entferne ich alle Zeilen aus der Textdatei, die die Wörter "cat" und "rat" enthält?
command-line
text-processing
PersonX
quelle
quelle
Antworten:
grep
AnsatzUm eine Kopie der Datei ohne Zeilen zu erstellen, die mit "cat" oder "rat" übereinstimmen, können Sie
grep
umgekehrt (-v
) und mit der Ganzwortoption (-w
) vorgehen .Die Ganzwort-Option stellt sicher, dass es nicht passt
cats
odergrateful
zum Beispiel. Die Ausgabeumleitung Ihrer Shell wird verwendet (>
), um sie in eine neue Datei zu schreiben. Wir benötigen die-E
Option, um die erweiterten regulären Ausdrücke für die(one|other)
Syntax zu aktivieren .sed
AnsatzUm die vorhandenen Zeilen zu entfernen, können Sie alternativ Folgendes verwenden
sed -i
:Das
\b
setzt Wortgrenzen und died
Operation löscht die Zeile, die dem Ausdruck zwischen den Schrägstrichen entspricht.cat
undrat
beide stimmen mit der(one|other)
Syntax überein, die wir anscheinend mit Backslashes umgehen müssen.Tipp: Verwenden Sie diese Option
sed
ohne-i
Operator, um die Ausgabe des Befehls zu testen, bevor Sie die Datei überschreiben.(Basierend auf Sed - Löschen einer Zeile, die eine bestimmte Zeichenfolge enthält )
quelle
Verwenden Sie zum Testen nur im Terminal:
Um diese Zeilen wirklich aus der Datei zu entfernen, verwenden Sie:
quelle
Probieren Sie die vim-way:
quelle
Überlegen Sie, ob Sie eine Datei mit haben
file_name
und nach mouse suchen möchten, aber gleichzeitig nur wenige Zeilen von mouse mit anderen Wörtern wiecat
undrat
und diese nicht in Ihrer Ausgabe anzeigen möchten.quelle
tragbare Schale Weg
Arbeitet in
/bin/sh
, wasdash
auf Ubuntu, sowieksh
undbash
. Etwas umständlich, dass Sie mehrere Testfälle für jedes Wort incase
Anweisung schreiben müssen, aber portabel. Funktioniert mit Fällen, in denen das Wort allein in der Zeile, am Anfang, am Ende oder in der Mitte der Zeile vorkommt und ignoriert, wo es Teil eines anderen Wortes sein könnte.Und so funktioniert es:
quelle