Ok, trochę późno dodając swój wkład, ale myślę, że warto.
Wymóg spełnienia w odniesieniu do PO jest pierwszą kolumną mającą wartość dziesiętną .000
lub .500
tylko. Nie ma ograniczeń co do wiodącej wartości, ani według zakresu, ani długości. Aby zapewnić niezawodność, nie należy zakładać, że jest ograniczany przez cokolwiek poza tym, że przed pierwszą kolumną (lub nie jest to już pierwsza kolumna) nie ma niepustych znaków, a zawartość pierwszej kolumny będzie miała kropkę dziesiętną .
, gdzieś w tym.
OP chce użyć grep
, który wypisze całą linię po znalezieniu dopasowania, więc jedyne, co można zrobić, to stworzyć wzór, który pasuje do wszystkich i tylko tego, co jest wymagane.
Prostota sama w sobie, i nie ma powodu, aby używać sed
lub awk
jako `grep, może obsłużyć źródło jako plik lub potok.
Do grep
pliku użyjgrep '^[^.]*\.[05]0\{2\}\s' the_file.txt
Do grep
z potoku użyjmy_command | grep '^[^.]*\.[05]0\{2\}\s'
Wzór jest następujący:, ^
zacznij od początku linii; [^.]
, dopasuj dowolny znak nie dziesiętny; *
, tyle razy, ile to możliwe (w tym żaden); \.
, dopasuj przecinek dziesiętny; [05]
, dopasuj pięć lub zero; 0\{2\}
, dopasuj jeszcze 2 zera (odwrotne ukośniki przed otwieraniem i zamykaniem klamry uniemożliwiają powłoce próby rozszerzenia nawiasu klamrowego); \s
, dopasuj biały znak (oznaczający koniec kolumny - aby użyć w innym przypadku użycia, zamień na separator kolumny, zwykle na przecinek, średnik lub tabulator \t
).
Zauważ, że będzie to dokładnie zgodne z żądaniem OP. To będzie nie pasuje .5000
lub .0000
chociaż numerycznie równoważne, ponieważ wygląda wzór dla pięciu lub zero, a następnie dokładnie 2 więcej zer następnie spacji. Jeśli jest to znaczące, wówczas wszystkie inne odpowiedzi, jak dotąd, zawodzą, ponieważ będą pasować do dowolnej liczby zer, większej niż 1, za cyfrą testową. I z wyjątkiem odpowiedzi FloHimself, dopasują wszystko w drugiej kolumnie, która się zaczyna .000
lub .500
, włączając .0003
i .500T
, a ta przez FloHimself dopasuje wszystko, co jest matematycznie równoważne .0
i.5
, bez względu na liczbę zer. Ten ostatni, choć niezgodny z tym, co stwierdził PO, prawdopodobnie i tak odpowiada temu, czego potrzebuje PO.
Wreszcie, jeśli awk
pożądana jest moc i prędkość, nawet jeśli poprosił o to OP grep
, wówczas polecenie brzmiałoby:
Z plikiem awk '$1 ~ /[^.]\.[05]0{2}$/' the_file.txt
Z rurką my_command | awk '$1 ~ /[^.]\.[05]0{2}$/'