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

  • Care grep? GNU grep? Sunteți pe Linux, Solaris, BSD-urile?
  • I ' m folosind Linux.

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.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *