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
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.
-H
jelző agrep
egy nem szabványos GNU kiterjesztés , és alternatív megközelítést jelent a nem GNU rendszerek számára.