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.
-H
dogrep
jest niestandardowym rozszerzeniem GNU i stanowi alternatywne podejście dla systemów innych niż GNU.