2010-09-15 11 views
5

chcę, aby wyświetlić wszystkie wiersze z jednej które pasują do wyrażenia regularnegojak wyświetlić wszystkie wiersze z jednej które odpowiadają regex w linux

jeśli mam pliku

foo 
bar123 
baz12435 
lorem 
ipsum 
dolor 
sit 
amet 

ten display-from baz[0-9]* < file sould zwrotu (To nie ma „t znaczenia, czy wyświetlać dopasowaną linię lub nie)

lorem 
ipsum 
dolor 
sit 
amet 

Jak mogę to zrobić w Linuksie (z sed, awk czy grep)

Odpowiedz

5
sed -e '/baz[0-9]*/,$b' -e 'd' file 

To usunie wszystkie wiersze z wejścia z wyjątkiem tych z pierwszej linii, który pasuje do wyrażenia regularnego (/ Baz [0-9] * /) do końca plik ($).

4

Wystarczy użyć grep:

$ grep -E 'baz[0-9]*' file -A9999 

Tutaj opcja „-A” mówi grep ile wierszy do wyświetlenia po meczu. Jest trochę niezgrabny, ale jeśli istnieje górna granica długości plików wejściowych, może działać poprawnie.

-1

Używam grep do wyszukiwania słowa kluczowego w pliku. Używam następujące:

 
Syntax => grep pattern filename 
examlpe 
grep amet /path_to_file 
5

Zaakceptowanych odpowiedź drukuje wiersz, który zawiera wzór. Jeśli chcesz wyłączyć tę linię:

sed '1,/baz[0-9]*/d' file 

Prostsza wersja przyjętego odpowiedź:

sed -ne '/baz[0-9]*/,$p' file 

Niektóre wersje sed nie potrzebują -e wyjątkiem pewnych okolicznościach (ale przyjmuję je tak) a niektórzy to robią. Te przykłady ilustrują oba typy.

Powiązane problemy