Når jeg bruker find
, hvordan returnerer jeg filnavnet og linjenummeret når jeg søker etter en streng? Jeg klarer å returnere filnavnet i en kommando og linjenumrene med en annen, men jeg ser ikke ut til å kombinere dem.
Filnavn: find . -type f -exec grep -l "string to search" {} \;
Linjenumre: find . -type f -exec grep -n "string to search" {} \;
Svar
kommandolinjebryter -H
tvinger grep
til å skrive ut filnavnet, selv med bare 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.
Merk at som Kojiro sier i en kommentar , dette er ikke en del av POSIX-standarden, det er i både GNU og BSD grep, men det er mulig at noen 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
alternativ)
Kommentarer
- både + og -H fungerer bra, takk!
- Og relatert til dette svaret: unix.stackexchange.com/questions/3682/…
- +1 Høyre, fordi å føre til at
grep
har flere filnavn args, vil tvinge den til å sende ut de samsvarende filnavnene. Smart!
Svar
Hvis grep støtter rekursivt -r
flagg, dette løser forespørselen din:
grep -rn "String to search " *
Kommentarer
- At ' er sant, men jeg ser ikke ' hva dette legger til de eksisterende svarene.
- Og hvis det bare er ett (ikke-punkt ) -fil i gjeldende katalog, viser ikke filnavnet.
-H
flagget tilgrep
er en ikke-standard GNU-utvidelse og utgjør en alternativ tilnærming for ikke-GNU-systemer.