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 {} \;

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.


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 {} \;

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.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.