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

  • Dette svar kunne forbedres ved at påpege, at -H flag til grep er en ikke-standard GNU-udvidelse og udgør en alternativ tilgang til ikke-GNU-systemer.

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.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *