Wie lösche ich die Zeilen aus einer Datei, die keinen Punkt enthält?


10

Ich habe eine Datei, die Daten einschließlich URLs enthält. Es gibt jedoch verschiedene Zeilen, die keine URLs sind. Wie kann ich sie mit Ubuntu-Terminalbefehlen entfernen?

Hier ist die Beispieldatei als Referenz: Beispieldaten

com.blendtuts/S
°=
com.blengineering.www/:http
±=

Ich möchte die Ausgabe haben:

com.blendtuts/S
com.blengineering.www/:http

Die zusätzlichen unerwünschten Linien haben keinen Punkt. Daher möchte ich die Linien ohne Punkte entfernen

Antworten:


30

Ein Weg mit sed

sed '/\./!d' file
  • /\./Übereinstimmungsliteralpunkt (Escapezeichen mit, \da sonst ein .beliebiges Zeichen übereinstimmt)
  • !d Löschen Sie alles außer dem übereinstimmenden Muster

Wenn Sie die Datei an Ort und Stelle bearbeiten möchten, fügen Sie sie -inach dem Testen zum Befehl hinzu. (Sie können .bakdas -iFlag auch hinzufügen , sed -i.bak ...um eine lokale Sicherung der Datei zu erstellen.)

sed -i '/\./!d' file

26

Sie können alles mit einem Punkt in eine neue Datei einfügen:

grep "\."  file > newfile

Auf diese Weise können Sie Ihre alte Datei speichern.


10

Oder behalten Sie die Linien, die einen Punkt enthalten ,

sed -ni.bak '/\./p' infile

8

Ich denke, awkist das letzte, was der Party fehlt:

$ awk -F\. 'NF>1' file
com.blendtuts/S
com.blengineering.www/:http

Dies setzt das Feldtrennzeichen auf den Punkt. Dann müssen die Zeilen mit mindestens zwei Feldern gedruckt werden. Dies bedeutet, dass mindestens ein Punkt auftritt.


3
Eine einfachere awk-Lösung wäre, es in der gleichen Weise wie grep zu tun: awk '/\./' file- das heißt, nur die Zeilen zu drucken, die das Zeichen '.' Enthalten.
Chris Midgley

@ ChrisMidgley gut! Da dies die Antwort mit grepbereits vorgeschlagen ist, zog ich es vor, mit einigen awkspezifischen Sachen zu gehen :)
Fedorqui

6

Perl verwenden:

perl -i -ne 'print if /\./' /path/to/file

6

Sie können dies ziemlich einfach mit vim tun. Wenn Sie vim als Texteditor verwenden möchten (Öffnen, Bearbeiten und Schreiben von Dateien), gehen Sie folgendermaßen vor:

:g!/\./d

Wenn Sie mit vim nicht vertraut sind oder es lieber als Befehlszeilentool verwenden möchten, können Sie dies einfach über das Terminal tun:

vim file -c "g!/\./d" -c "wq"

Sie können dies leicht ändern, um es in einer neuen Datei zu speichern:

vim file -c "g!/\./d" -c "w newfile" -c "q!"

Dies verwendet den "globalen" Befehl von vim, der einen ex-Befehl auf jede Zeile anwendet, die mit einem regulären Ausdruck übereinstimmt (oder nicht übereinstimmt). In diesem Fall lautet der Befehl "(d) elete" und wird auf jeden Befehl angewendet, der nicht mit dem regulären Ausdruck übereinstimmt\.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.