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.
-H
flaggan tillgrep
är en icke-standardiserad GNU-förlängning och utgör en alternativ metod för icke-GNU-system.