W przypadku korzystania z find, w jaki sposób mogę zwrócić nazwę pliku i numer wiersza podczas wyszukiwania ciągu? Udaje mi się zwrócić nazwę pliku w jednym poleceniu i numery wierszy w innym, ale nie mogę ich połączyć.

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

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

Odpowiedź

przełącznik wiersza poleceń -H wymusza grep wydrukowanie 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. 

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

Komentarze

Odpowiedź

find . -type f -exec grep -n "string to search" /dev/null {} + 

(lub z GNU grep, zobacz -H)

Komentarze

  • + i -H działają świetnie, dziękuję!
  • I związane z tą odpowiedzią: unix.stackexchange.com/questions/3682/…
  • +1 Dobrze, ponieważ spowodowanie, że grep ma wiele argumentów nazw plików, zmusiłoby go do wypisania pasujących nazw plików. Sprytnie!

Odpowiedź

Jeśli twój grep obsługuje rekurencyjne -r flaga, to rozwiązuje Twoją prośbę:

grep -rn "String to search " * 

Komentarze

  • To ' jest prawdziwe, ale nie ' nie widzę, co to dodaje do istniejących odpowiedzi.
  • A jeśli jest tylko jedna (bez kropki ) w bieżącym katalogu, nie wyświetla nazwy pliku.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *