Ok, etwas spät in meinem Beitrag, aber ich denke, es lohnt sich.
Die Anforderung, die laut OP erfüllt werden muss, ist die erste Spalte mit dem Dezimalwert von .000
oder .500
nur. Es gibt keine Bestimmung bezüglich des Leitwerts, weder nach Bereich noch nach Länge. Für Robustheit sollte durch nichts außer , dass es keine nicht-leere Zeichen vor der ersten Spalte (oder es ist nicht mehr die erste Spalte) , und dass der Inhalt der ersten Spalte nicht davon ausgegangen werden , gezwungen wird , wird eine Dezimalstelle .
, irgendwo drin.
Das OP möchte verwenden grep
, wodurch die gesamte Zeile gedruckt wird, wenn eine Übereinstimmung gefunden wird. Das einzige, was zu tun ist, ist das Muster zu erstellen, das allen und nur dem entspricht, was erforderlich ist.
Die Einfachheit selbst und kein Grund, sed
oder awk
als `grep zu verwenden, kann die Quelle als Datei oder Pipe behandeln.
Um grep
eine Datei zu verwendengrep '^[^.]*\.[05]0\{2\}\s' the_file.txt
Um grep
von einem Rohr zu verwendenmy_command | grep '^[^.]*\.[05]0\{2\}\s'
Das Muster lautet : ^
, am Zeilenanfang beginnen; [^.]
, mit einem beliebigen Nicht-Dezimalzeichen übereinstimmen; *
so oft wie möglich (einschließlich keiner); \.
mit einem Dezimalpunkt übereinstimmen; [05]
stimmen entweder mit einer Fünf oder einer Null überein; 0\{2\}
, passen Sie 2 weitere Nullen an (die umgekehrten Schrägstriche vor dem Öffnen und Schließen der Klammer verhindern, dass die Shell versucht, eine Klammererweiterung durchzuführen); \s
, entsprechen einem Leerzeichen (dh dem Ende der Spalte - um es in einem anderen Anwendungsfall zu verwenden, ersetzen Sie es durch das Spaltentrennzeichen, normalerweise ein Komman, ein Semikolon oder eine Registerkarte \t
).
Beachten Sie, dass dies genau dem entspricht, was das OP verlangt hat. Es wird nicht übereinstimmen .5000
oder .0000
obwohl es numerisch äquivalent ist, da das Muster nach einer Fünf oder einer Null sucht, gefolgt von genau zwei weiteren Nullen, gefolgt von Leerzeichen. Wenn dies von Bedeutung ist, schlagen alle anderen Antworten bisher fehl, da sie nach der Testziffer mit einer beliebigen Anzahl von Nullen größer als 1 übereinstimmen. Und mit Ausnahme der Antwort von FloHimself stimmen sie mit allem in der zweiten Spalte überein, die beginnt, .000
oder .500
, einschließlich .0003
und .500T
, und die von FloHimself stimmt mit allem überein, was mathematisch äquivalent zu .0
und ist.5
, egal wie viele Nullen es gibt. Der letzte entspricht zwar nicht den Angaben des OP, entspricht jedoch wahrscheinlich den Anforderungen des OP.
Wenn schließlich die Leistung und Geschwindigkeit von awk
gewünscht wird, obwohl das OP dies verlangt grep
, lautet der Befehl:
Mit einer Datei awk '$1 ~ /[^.]\.[05]0{2}$/' the_file.txt
Mit einer Pfeife my_command | awk '$1 ~ /[^.]\.[05]0{2}$/'