Hur returnerar jag filnamnet och radnumret när jag söker efter en sträng när jag använder find? Jag lyckas returnera filnamnet i ett kommando och radnumren med ett annat, men det verkar inte som om jag kombinerar dem.

Filnamn: find . -type f -exec grep -l "string to search" {} \;

Radnummer: find . -type f -exec grep -n "string to search" {} \;

Svar

kommandoradsomkopplare -H tvingar grep att skriva ut filnamnet, även med bara 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. 

Observera att som Kojiro säger i en kommentar , detta är inte en del av POSIX-standarden, det finns både GNU och BSD grep, men det är möjligt att vissa system inte har det (t.ex. Solaris).

Kommentarer

Svar

find . -type f -exec grep -n "string to search" /dev/null {} + 

(eller med GNU grep, se -H -alternativ)

Kommentarer

  • både + och -H fungerar bra, tack!
  • Och relaterat till det här svaret: unix.stackexchange.com/questions/3682/…
  • +1 Rätt, för att orsaka grep att ha flera filnamn args skulle tvinga den att mata ut de matchade filnamnen. Smart!

Svar

Om din grep stöder det rekursiva -r flagga, detta löser din begäran:

grep -rn "String to search " * 

Kommentarer

  • Att ' är sant, men jag ser inte ' vad detta lägger till de befintliga svaren.
  • Och om det bara finns en (icke-punkt ) -fil i den aktuella katalogen, detta visar inte filens namn.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *