Trebuie să grep câteva fișiere pentru a vedea care dintre ele conțin un anumit cuvânt:
grep -l word *
În continuare, trebuie să grep acea listă de fișiere pentru a vedea care dintre ele conțin un cuvânt diferit. Modul ușor ar fi probabil să scriem un script, dar nu știu cum să îl lucram.
Comentarii
Răspuns
Presupunând că niciunul dintre numele fișierelor nu conține spațiu alb, ghilimel unic, ghilimele duble sau caractere inversă (sau începeți cu – cu GNU grep
), puteți face:
grep -l word * | xargs grep word2
Xargs va rula al doilea grep peste fiecare fișier din primul grep.
Cu GNU grep
/ xargs
sau compatibil, îl puteți face mai fiabil cu:
grep -lZ word ./* | xargs -r0 grep word2
Utilizarea -Z
face ca grep
tipăriți numele fișierelor delimitate prin NUL, astfel încât să poată fi utilizate cu xargs -0
. Opțiunea -r
la xargs
evită ca al doilea grep
să fie rulat dacă primul grep
nu găsește nimic.
Răspuns
grep -l word1 $(grep -l word2 *)
sau poate pentru unul dintre cele două cuvinte de pe aceeași linie:
grep -w "word1\|word2" *
vezi aici
Răspuns
Dacă trebuie să găsiți fișiere care conțin un cuvânt și apoi să filtrați acele fișiere care conțin un alt cuvânt, puteți utiliza o secvență de comenzi de genul acesta:
grep word * | awk -F ":" "{print $1}"|uniq | xargs grep word2
-
grep word *
– va afișa toate fișierele care conțin „cuvânt”, numele fișierului va fi primul din listă. -
awk -F ":" "{print $1}"
– va imprima numai numele de fișier al rezultatelor dvs. -
uniq
– vă va asigura că nu imprimați numele fișierului mai mult de o dată. -
xargs grep word2
– va căuta din nou în lista de fișiere pe care le-ați primit.
Comentarii
- @don_crissti Dar combinarea pieselor
grep -l word1 * | xargs -d'\n' grep -l word2
funcționează pentru orice, cu excepția liniei noi, care este destul de ciudat, aproape nimeni nu o folosește.
grep
? GNUgrep
? Sunteți pe Linux, Solaris, BSD-urile?