Kun käytetään find
, miten palautan tiedostonimen ja rivinumeron, kun etsin merkkijonoa? Pystyn palauttamaan tiedoston nimen yhdessä komennossa ja rivinumerot toisen kanssa, mutta en näytä yhdistävän niitä.
Tiedostonimet: find . -type f -exec grep -l "string to search" {} \;
Rivinumero: find . -type f -exec grep -n "string to search" {} \;
Vastaa
komentorivikytkin -H
pakottaa grep
tulostamaan tiedostonimen, jopa yhdellä tiedostolla.
% 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.
Huomaa, että kuten Kojiro sanoo kommentti , tämä ei ole osa POSIX-standardia; se on sekä GNU- että BSD-grepissä, mutta on mahdollista, että joillakin järjestelmillä ei ole sitä (esim. Solaris).
kommentit
Vastaa
find . -type f -exec grep -n "string to search" /dev/null {} +
(tai GNU-grepillä, katso -H
vaihtoehto)
Kommentit
- sekä + että -H toimivat hyvin, kiitos!
- Ja liittyy tähän vastaukseen: unix.stackexchange.com/questions/3682/…
- +1 Oikea, koska jos
grep
: llä on useita tiedostonimen argumentteja, se pakotetaan antamaan vastaavat tiedostojen nimet. Älykäs!
Vastaa
Jos grep tukee rekursiivista -r
lippu, tämä ratkaisee pyyntösi:
grep -rn "String to search " *
kommentit
- että ' on totta, mutta en ' näe, mitä tämä lisää olemassa oleviin vastauksiin.
- Ja jos on vain yksi (ei ) -tiedosto nykyisessä hakemistossa, tämä ei näytä tiedoston nimeä.
-H
-merkkigrep
on epätyypillinen GNU-laajennus ja tarjoaa vaihtoehtoisen lähestymistavan muille kuin GNU-järjestelmille.