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

  • Tätä vastausta voitaisiin parantaa huomauttamalla, että -H -merkki grep on epätyypillinen GNU-laajennus ja tarjoaa vaihtoehtoisen lähestymistavan muille kuin GNU-järjestelmille.

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ä.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *