Minun täytyy napata joitain tiedostoja nähdäksesi, mitkä sisältävät tietyn sanan:

grep -l word * 

Seuraavaksi minun täytyy napata tuo tiedostoluettelo nähdäksesi, mitkä niistä sisältävät eri sanan. Helppo tapa olisi luultavasti kirjoittaa käsikirjoitus, mutta en tiedä miten sitä työskennellä.

Kommentit

  • Mikä grep? GNU grep? Käytätkö Linuxia, Solarisia tai BSD: tä?
  • I ' m Linux-käyttöjärjestelmällä.

Vastaus

Olettaen, että mikään tiedostojen nimistä ei sisällä välilyöntiä, yksittäistä lainausta, kaksoislainausmerkki tai taaksepäin viiva (tai aloita – GNU: lla grep), voit tehdä seuraavaa:

grep -l word * | xargs grep word2 

Xargs suorittaa toisen grepin jokaisen tiedoston ensimmäisestä grepistä.

GNU: lla grep / xargs tai yhteensopivalla, voit tehdä siitä luotettavamman:

grep -lZ word ./* | xargs -r0 grep word2 

-Z -toiminnon avulla grep tulosta tiedostojen nimet NUL-eroteltuina, jotta sitä voidaan käyttää xargs -0 kanssa. -r -vaihtoehto xargs välttää toisen grep ajon, jos ensimmäinen grep ei löydä mitään.

Vastaa

grep -l word1 $(grep -l word2 *) 

tai ehkä yhdelle saman rivin kahdesta sanasta:

grep -w "word1\|word2" * 

katso täällä

Vastaa

Jos haluat etsiä tiedostoja, jotka sisältävät sanan, ja suodattaa sitten ne tiedostot, jotka sisältävät toisen sanan, voit käyttää seuraavia komentoja:

grep word * | awk -F ":" "{print $1}"|uniq | xargs grep word2 
  • grep word * – näyttää kaikki tiedostot, jotka sisältävät sanan, tiedostonimi on luettelon ensimmäinen.
  • awk -F ":" "{print $1}" – tulostaa vain tulosten tiedostonimen
  • uniq – varmistaa, että et tulosta tiedostonimeä enempää kuin kerran.
  • xargs grep word2 – etsii uudelleen saamiesi tiedostojen luettelosta.

Kommentit

  • @don_crissti Mutta kappaleiden yhdistäminen grep -l word1 * | xargs -d'\n' grep -l word2 toimii mihin tahansa paitsi uudelle riville, mikä on tarpeeksi outoa, melkein kukaan ei käytä sitä.

Vastaa

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