Jak při použití find
vrátím při hledání řetězce název souboru a číslo řádku? Podařilo se mi vrátit název souboru v jednom příkazu a čísla řádků s jiným, ale zdá se mi, že je nekombinuji.
Názvy souborů: find . -type f -exec grep -l "string to search" {} \;
Čísla řádků: find . -type f -exec grep -n "string to search" {} \;
Odpověď
Přepínač příkazového řádku -H
vynutí grep
vytisknout název souboru, a to i jen s jedním souborem.
% 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.
Všimněte si, jak říká Kojiro v komentář , toto není součástí standardu POSIX; je v GNU i BSD grep, ale některé systémy jej možná nemají (např. Solaris).
Komentáře
Odpověď
find . -type f -exec grep -n "string to search" /dev/null {} +
(nebo s GNU grep, viz -H
možnost)
Komentáře
- oba + a -H fungují skvěle, děkuji!
- A související s touto odpovědí: unix.stackexchange.com/questions/3682/…
- +1 správně, protože způsobení toho, že
grep
bude mít více názvů souborů, by jej přinutilo k výstupu shodných názvů souborů. Chytré!
Odpověď
Pokud váš grep podporuje rekurzivní -r
příznak, toto vyřeší váš požadavek:
grep -rn "String to search " *
Komentáře
- To ' je pravda, ale ' nevidím, co to přidává ke stávajícím odpovědím.
- A pokud existuje pouze jedna ) soubor v aktuálním adresáři, nezobrazí se název souboru.
-H
příznakgrep
je nestandardní rozšíření GNU a představuje alternativní přístup pro systémy jiné než GNU.