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

  • Tuto odpověď lze vylepšit poukázáním na to, že -H příznak grep je nestandardní rozšíření GNU a představuje alternativní přístup pro systémy jiné než GNU.

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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *