Jak zwrócić zarówno nazwę pliku, jak i numer linii za pomocą polecenia find… -exec grep?


45

Podczas używania find, jak zwrócić nazwę pliku i numer wiersza podczas wyszukiwania ciągu? Udaje mi się zwrócić nazwę pliku w jednym poleceniu, a numery wierszy w innym, ale nie mogę ich połączyć.

Nazwy plików: find . -type f -exec grep -l 'string to search' {} \;

Numery linii: find . -type f -exec grep -n 'string to search' {} \;

Odpowiedzi:


51

Przełącznik wiersza poleceń -Hwymusza grepwydrukowanie nazwy pliku, nawet z jednym plikiem.

% grep -n 7 test.in
7:7
% grep -Hn 7 test.in
test.in:7:7

   -H, --with-filename
          Print the filename for each match.

Zauważ, że jak powiedział Kojiro w komentarzu , nie jest to część standardu POSIX; jest w grep zarówno GNU, jak i BSD, ale możliwe, że niektóre systemy go nie mają (np. Solaris).


4
Odpowiedź można poprawić, wskazując, że -Hflaga to grepjest niestandardowym rozszerzeniem GNU i stanowi alternatywne podejście do systemów innych niż GNU.
kojiro


-1

Jeśli twój grep obsługuje -rflagę rekurencyjną , to rozwiązuje twoje żądanie:

grep -rn "String to search " * 

1
To prawda, ale nie rozumiem, co to dodaje do istniejących odpowiedzi.
Wildcard

A jeśli w bieżącym katalogu jest tylko jeden plik (bez kropek), nie wyświetla to nazwy pliku.
G-Man mówi „Przywróć Monikę”
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.