Behalten Sie nur Zeilen mit x oder weniger Zahlen. TXT-Datei

Behalten Sie nur Zeilen mit x oder weniger Zahlen. TXT-Datei

Ich habe eine ähnliche Frage gefunden:

In diesem Fall möchte ich jedoch nicht die Gesamtlänge, sondern die Anzahl der Ziffern in der Zeile überprüfen. Aus dieser Eingabe ergibt sich beispielsweise:

cdc85e24-b9e9-8802-080a-b84479e1ae82  
ekodeveloper0  
1795475824.1129747.1472396049615.ref  
1795475824.1129747.1472396049615  
967175540.1194446.1472407271491  
wangxiuyan552  
jveazey  
xoloki  
whelee  
matthauck  
patel3.anirudh  
mischa.salle  

Wie kann ich alle Zeilen mit mehr als N Ziffern löschen?

Antwort1

Da Sie Ihre Frage mit gekennzeichnet haben perl, besteht eine Möglichkeit, dies in Perl zu tun, darin, die Tatsache auszunutzen, dass Perl treine Zählung der Anzahl der ersetzten Zeichen zurückgibt. N = 13Sie könnten also beispielsweise (unter Verwendung von ) Folgendes tun

perl -ne 'print unless tr/[0-9]/[0-9]/ > 13' file
ekodeveloper0
wangxiuyan552
jveazey
xoloki
whelee
matthauck
patel3.anirudh
mischa.salle

Ein möglicherweise konventionellerer Weg wäre, die Regex-Übereinstimmung in einem Skalarkontext auszuwerten, um eine Anzahl zu erhalten

perl -ne '$c = () = /\d/g; print unless $c > 13' file

Siehe zum BeispielGibt es eine Perl-Abkürzung zum Zählen der Anzahl der Übereinstimmungen in einer Zeichenfolge?

Antwort2

Es ist einfacher, nur Zeilen mit X odermehrZahlen. Hier ist ein Beispiel dafür, bei dem X gleich 13 ist:

sed -n 's/[0-9]/&/13p' input.txt > output.txt

Sie können dies jedoch ändern, um das Gegenteil zu erreichen. Hier ist ein Befehl, der nur Zeilen behält, dieweniger als 13Zahlen:

sed -n -e 's/[0-9]/&/13;t' -e 'p' input.txt > output.txt

Erklärung - nur Zeilen mit 13+ Zahlen drucken

sed -n 's/[0-9]/&/13p' input.txt > output.txt

Das &Symbol im Ersetzungstext bedeutet „alles, was übereinstimmt“.

Die Nummernflagge im sBefehl (nach dem /find/replace/Teil) bedeutet, dass nur diese Instanz des Suchmusters ersetzt wird.

Die pFlagge des sBefehls bedeutet „Drucken, wenn eine Ersetzung vorgenommen wurde.“

Der -nSchalter dient natürlich dazu, Seds Standardaktion „Drucken“ zu unterdrücken.

Erklärung - nur Zeilen mit <13 Zahlen drucken

sed -n -e 's/[0-9]/&/13;t' -e 'p' input.txt > output.txt

Der -eSchalter ist "Ausführen"; er übergibt nur einen Befehl. Wir brauchen ihn hier, da wir mehr als einen übergeben.

Der tBefehl überspringt die verbleibenden Befehle, wenn der letzte sBefehl eine Ersetzung durchgeführt hat.

Der pBefehl wird gedruckt.

verwandte Informationen