2013-03-22 16 views
11

Chcę filtrować wyjście dowolnego wyjścia, np. cat lub objdump, aby wyświetlać tylko linie zawierające "wzór".filtruj każdą linię wyjścia linuxowego bash'a przez regexp

Czy jest to jedno-liniowe polecenie systemu UNIX/Linux, aby to zrobić?

np. cat filepath | xargs grep 'pattern' -l nie pracuje dla mnie

+2

'xargs' przekazywałby każdy wiersz wyniku jako niezależny argument do' grep'. 'grep' jest bardzo zdolny do czytania z' stdin', gdy potrącasz wyjście 'cat'. Więc samo usunięcie 'xargs' powinno działać. Opcja -l "do grep nie jest tak naprawdę wymagana w przypadku użycia. A jeśli użyjesz '-l', to powinno być przed wzorcem, a nie po;) – Tuxdude

Odpowiedz

12
cat file | grep pattern 

Można też po prostu użyć grep pattern file jeśli jest to plik statyczny.

+0

możesz użyć flagi' '-n'' do wyświetlenia numerów linii. '' plik cat | grep -n wzór'' –

+0

ah tak prosty ... odpowiedź przyjęta! –

4

Lepiej używać grep -e lub egrep (pozwala to na dłuższych wyrażeń regularnych). Następnie można zrobić bardziej solidnych rzeczy z regex:

cat my_phonebook | egrep "[0-9]{10}" 

Aby wyświetlić wszystkie numery telefonów 10 cyfr w pliku.

Jeśli wrzucisz -o, tylko liczby zostaną zwrócone (zamiast zawartości przed i po linii).

Powiązane problemy