grep bez pokazywania ścieżki / pliku: linia

234

Jak grep i zwracasz tylko pasującą linię? tzn. ścieżka / nazwa pliku jest pomijana w wynikach.

W tym przypadku chcę zajrzeć do wszystkich plików .bar w bieżącym katalogu, szukając terminu FOO

find . -name '*.bar' -exec grep -Hn FOO {} \;
Allan Thomas
źródło

Odpowiedzi:

375

Nie trzeba find. Jeśli szukasz tylko wzorca w określonym katalogu, powinno to wystarczyć:

grep -hn FOO /your/path/*.bar

Gdzie -hjest parametr, aby ukryć nazwę pliku, ponieważ man grep:

-h, --no-nazwa_pliku

Pomiń prefiks nazw plików na wyjściu. Jest to ustawienie domyślne, gdy do wyszukiwania jest tylko jeden plik (lub tylko standardowe wejście).

Pamiętaj, że korzystałeś

-H, - z nazwą pliku

Wydrukuj nazwę pliku dla każdego dopasowania. Jest to ustawienie domyślne, gdy istnieje więcej niż jeden plik do przeszukania.

fedorqui „SO przestań szkodzić”
źródło
czy można pominąć numer linii?
javadba
@javadba prawdopodobnie używasz aliasu, wpisz alias grep. Aby pominąć alias, wpisz\grep ...
fedorqui „SO przestań szkodzić”
1
Tak, używał aliasu.
javadba
8

Wystarczy wymienić -Hz -h. Sprawdź man grepwięcej szczegółów na temat opcji

find . -name '*.bar' -exec grep -hn FOO {} \;
jkshah
źródło
6

Ze strony podręcznika:

-h, --no-filename
    Suppress the prefixing of file names on output. This is the default when there
    is only one file (or only standard input) to search.
TC1
źródło