Verwenden Sie sed
, um die vorhandene Datei zu ändern:
sed -i '/^\(report\|-t\(h\|o\)\)/!d' your_file
Dies weist sed
an, alle Zeilen zu löschen, die nicht mit dem Muster übereinstimmen. Das Muster selbst ist ^
(Zeilenanfang), gefolgt von entweder report
oder -t
gefolgt von entweder h
oder o
.
Sie sollten beachten, dass dies keine tatsächliche direkte Änderung ist: sed
Erstellt eine temporäre Sicherungskopie und überschreibt damit die Originaldatei.
Wenn Sie sed
eine Sicherungskopie der Originaldatei aufbewahren möchten (was eine gute Idee sein kann, wenn die Datei wichtige Daten enthält), geben Sie dem -i
Switch eine Erweiterung zum Erstellen einer Sicherungsdatei:
sed -i'.bak' -e '/^\(report\|-t\(h\|o\)\)/!d' your_file
ändert your_file
und erstellt ein Backup des aufgerufenen Originals your_file.bak
.
Eine Randnotiz
Bitte missverstehen Sie meine Absichten nicht und beleidigen Sie dies nicht, aber ich habe festgestellt, dass Sie viele ähnliche Fragen zu Regex / Textverarbeitung haben. Ich rate Ihnen , das Lernen zu beginnen sed
, awk
und grep
auf eigene Faust zu helfen beschleunigen Ihre Produktivität. Versteh mich nicht falsch, ich bin nur allzu glücklich zu helfen (wie die meisten Leute hier); Ich denke nur, dass Sie enorm davon profitieren werden, wenn Sie diese Werkzeuge für Ihren täglichen Gebrauch in die Hand nehmen.
Um zu beweisen, wie hilfreich die Leute hier sind, sollten Sie den Vorschlag von @ slm in den Kommentaren unten berücksichtigen und jederzeit bei Fragen in diesem Chatroom vorbeischauen .
Sie können hierfür einfaches grep verwenden:
quelle
-th
/-to
in kombinieren-t[ho]
.grep -e
oderegrep
Verwenden von
sed
:quelle
-th
/-to
in kombinieren-t[ho]
.Verwenden von
awk
:quelle
-th
/-to
in kombinieren-t[ho]
.Der Fragesteller hat zwei Punkte angesprochen:
Die Lösungen befassen sich zu diesem Zeitpunkt mit dem ersten Punkt und damit auch mit dem zweiten. Angenommen, die Datei ist größer und sieht folgendermaßen aus:
Würde es nicht notwendig sein, den zweiten Punkt von OP anzusprechen?
erledigt die Aufgabe, vermutlich unerwünschte Linien zu entfernen, die nur Leerzeichen, Punkte und Striche enthalten, und den Rest beizubehalten, was auch immer das ist.
Ich würde denken, dass das Risiko beider Ansätze darin besteht, dass die Art der Datei nicht richtig definiert ist.
quelle
Verwenden von Perl:
oder, zu bearbeiten anstatt (wie
sed
,perl
wird auch eine temporäre Sicherung machen , so dies nicht wahr ist an Ort und Stelle bearbeiten):Dadurch wird eine Kopie der aufgerufenen Originaldatei erstellt
filename.bak
und Ihre Originaldatei mit der bearbeiteten Version überschrieben.quelle