A find használatakor hogyan adhatom vissza a fájl nevét és a sorszámot, amikor karakterláncot keresek? Sikerül visszaküldenem a fájlnevet egy parancsban, a sorszámokat pedig egy másikba, de úgy tűnik, hogy nem tudom ezeket összekapcsolni.

Fájlnevek: find . -type f -exec grep -l "string to search" {} \;

Sorszámok: find . -type f -exec grep -n "string to search" {} \;

Válasz

A parancssori kapcsoló -H arra kényszeríti a grep -t, hogy kinyomtassa a fájl nevét, akár csak egy fájl esetén is.

% 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. 

Vegye figyelembe, hogy ahogy Kojiro mondja a egy megjegyzés , ez nem része a POSIX szabványnak; mind a GNU, mind a BSD grep-ben szerepel, de lehetséges, hogy egyes rendszerekben nincs (pl. Solaris).

Megjegyzések

  • Ez a válasz javítható azzal, hogy rámutat arra, hogy a -H jelző a grep egy nem szabványos GNU kiterjesztés , és alternatív megközelítést jelent a nem GNU rendszerek számára.

Válasz

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

(vagy a GNU grep segítségével lásd: -H opció)

Megjegyzések

  • mind a +, mind a -H kiválóan működik, köszönöm!
  • És ehhez a válaszhoz kapcsolódik: unix.stackexchange.com/questions/3682/…
  • +1 Jobb, mert ha a grep fájlnévnek több fájlneve van, akkor rá kell kényszerítenie az egyező fájlnevek kiadására. Okos!

Válasz

Ha a grep támogatja a rekurzív -r flag, ez megoldja a kérését:

grep -rn "String to search " * 

Megjegyzések

  • Ez ' s igaz, de nem ' nem látom, hogy ez mit ad a meglévő válaszokhoz.
  • És ha csak egy van (nem pont ) fájl az aktuális könyvtárban, ez nem jeleníti meg a fájl nevét.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük