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
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ä.
grep
? GNUgrep
? Käytätkö Linuxia, Solarisia tai BSD: tä?