Haluaisin luetella rekursiivisesti ja ainutlaatuisesti tiedostot, jotka sisältävät annetun sanan.

Esimerkki : Tarkistetaan sana ”tarkista”, olen tavallisesti grep

$ grep check * -R 

Mutta koska tätä sanaa esiintyy monta kertaa, saan paljon tulosteita. Joten minun täytyy vain luetella tiedostonimet, jotka sisältävät annetun hakusanan. Luulen, että jokin temppu find ja xargs kanssa riittää tässä, mutta ei varma.

Onko sinulla ideoita?

Vastaa

Käytä -l tai --files-with-matches -vaihtoehto, joka on dokumentoitu seuraavasti:

Estä normaali lähtö; sen sijaan tulostaa jokaisen syötetiedoston nimi, josta lähtö olisi normaalisti tulostettu. Skannaus loppuu ensimmäisestä ottelusta. (POSIX määrittelee -l.)

Joten esimerkkinä voit käyttää seuraavaa:

$ grep check * -lR 

Kommentit

  • Toimii myös MSYS: ssä. Hienoa!
  • Käytin grep -rl "text to find" "/usr/share" ja se toimi hyvin!

Vastaa

find . -type f -exec grep -l check {} + 

Et todennäköisesti halua käyttää vaihtoehtoa -R, jota GNU: n moderneissa versioissa grep seuraa symbolisia linkkejä laskiessaan hakemistoja. Käytä sen sijaan vaihtoehtoa -r, joka version 2.12 (huhtikuu 2012) jälkeen ei enää seuraa symlinkkejä.

Jos grep ei ole GNU-tyyppinen tai on vanhempi kuin versio 2.12 tai jos tarvitset koodisi siirrettäväksi ei-verenvuotoisiin GNU-järjestelmiin, käytä find -komento yllä.

Muussa tapauksessa voit tehdä seuraavaa:

grep -rl check . 

Älä käytä * (koska tämä jättää piilotetut tiedostot pois nykyisestä hakemistosta (ja vain nykyisestä hakemistosta) ja aiheuttaisi ongelmia tiedostoille, joiden nimi alkaa -), vältä välittämistä vaihtoehdot argumenttien jälkeen, koska se ei ole takuu Suunniteltu toimimaan ympäristöstä riippuen, eikä sitä voi siirtää.

Vastaa

Kokeile tätä:

find . -type f | xargs grep -c check $1 | grep -v ":0" 

Mitä tulee grep -lippuihin …

-c tulee palauta tiedostonimi, jota seuraa: ja luku, joka kertoo, kuinka monta kertaa hakumerkkijono esiintyy annetussa tiedostossa.

-v ottaa tuloksen ensimmäisestä grep etsi, suodata tiedostot ilman tuloksia ja tulosta vain tiedostot, joilla ei ole nolla tulosta.

Kommentit

  • Tämä saa väärän negatiivisen tuloksen, jos sinulla on tiedostoja (tai ohjaimia), joiden nimet sisältävät :0. ' on parempi tehdä grep -v ':0$'. Jopa tämä tukahduttaa polkuja, jotka sisältävät uusia rivejä.

Vastaa

grep -lR "text-to-find" <where-to-find> toimii myös hyvin.

esim. grep -lR "NAVIGATE" . mistä löydämme sanan NAVIGATE hakemistosta . nykyisessä hakemistossa.

Vastaa

grep -rin ”whatToFind” locationToFInd

esim. $ grep -rin ”vihaan”.

etsii rekursiivisesti tiedostojen nimiä ja vastaavia rivejä, joissa on ”vihaan”, ”.” viittaa nykyiseen hakemistoon.

Vastaa

find . -type f | grep "keyword" * 

etsi nykyisessä hakemistossa. Jos haluat hakea juuresta, määritä / .

Vastaa

 grep -rli trim \` find . -name *.q \` 

Anna luettelo .q -tiedostoista, jotka sisältävät avainsanan iv id = ”b9226c43b6”

Vastaa

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