Når jeg bruger find
, hvordan returnerer jeg filnavnet og linjenummeret, når jeg søger efter en streng? Det lykkes mig at returnere filnavnet i en kommando og linjenumrene med en anden, men jeg kan ikke synes at kombinere dem.
Filnavne: find . -type f -exec grep -l "string to search" {} \;
Linjenumre: find . -type f -exec grep -n "string to search" {} \;
Svar
kommandolinjekontakt -H
tvinger grep
til at udskrive filnavnet, selv med kun en fil.
% 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.
Bemærk, at som Kojiro siger i en kommentar , dette er ikke en del af POSIX-standarden, det er i både GNU og BSD grep, men det er muligt, at nogle systemer ikke har det (f.eks. Solaris).
Kommentarer
Svar
find . -type f -exec grep -n "string to search" /dev/null {} +
(eller med GNU grep, se -H
option)
Kommentarer
- både + og -H fungerer godt, tak!
- Og relateret til dette svar: unix.stackexchange.com/questions/3682/…
- +1 Højre, fordi årsag til, at
grep
har flere filnavn args, vil tvinge det til at sende de matchede filnavne. Klogt!
Svar
Hvis din grep understøtter det rekursive -r
flag, dette løser din anmodning:
grep -rn "String to search " *
Kommentarer
- At ' er sandt, men jeg kan ikke ' ikke se, hvad dette tilføjer til de eksisterende svar.
- Og hvis der kun er et (ikke-prik ) -fil i det aktuelle bibliotek, dette viser ikke filens navn.
-H
flag tilgrep
er en ikke-standard GNU-udvidelse og udgør en alternativ tilgang til ikke-GNU-systemer.