Załóżmy, że mam plik zawierający następujące dwa wiersze:
2014-05-05 09:11:53 /aa/bbbb/cccccc 29899
2014-05-05 09:12:17 /aa/bbbb/cccccc?dddddddd 16767
Muszę uzyskać linię zawierającą /aa/bbbb/cccccc
tylko wzorzec , nie potrzebuję drugiej linii zawierającej dodatkowe znaki tj ?dddddddd
. Teraz kiedy próbowałem
grep '/aa/bbbb/cccccc' file
Następnie wybierane są obie linie. Potrzebuję pełnej linii, więc grep -o
nie może być rozwiązania.
Jakie może być możliwe użycie grep, aby na podstawie wzorca wyszukiwania wybrana została tylko pierwsza linia?
źródło
grep '/aa/bbbb/cccccc ' file
/aa/bbbb/cccccc
ciąg znaków.grep -E '/aa/bbbb/cccccc(\s+|$)' file
grep -E '(^|\s)/aa/bbbb/cccccc(\s|$)' file
Najprostszym sposobem byłoby dodanie spacji po wzorze:
Lub, aby dopasować wszystkie rodzaje białych znaków:
Lub
Lub z pozytywnym spojrzeniem w przyszłość :
Lub z negatywnym spojrzeniem w przyszłość :
Lub możesz cofnąć dopasowanie:
Lub, aby dopasować również linie, które nie zawierają nic oprócz wzorca (bez spacji końcowych):
Lub możesz po prostu użyć małego skryptu:
W awk:
Lub, jeśli nie wiesz, w którym polu znajduje się twój wzór
W Perlu
źródło
grep -v 'c?' file
dlaczego nie używasz,grep -v '?' file
ponieważ plik ma tylko dwie linie.grep -v '?'
wystarczy.W celu uzupełnienia @AvinashRaj „s odpowiedź , można użyć również dowodzić tak.
źródło