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

  • Dette svaret kan forbedres ved å påpeke at -H flagget til grep er en ikke-standard GNU-utvidelse og utgjør en alternativ tilnærming for ikke-GNU-systemer.

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.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *