Aș dori să listez fișierele recursiv și unic care conțin cuvântul dat.

Exemplu : Verificând cuvântul „verificare”, normal că este grep

$ grep check * -R 

Dar, deoarece există multe apariții ale acestui cuvânt, obțin o mulțime de rezultate. Deci, trebuie doar să listez numele fișierelor care conțin cuvântul de căutare dat. Cred că un truc cu find și xargs ar fi suficient aici, dar nu sunt sigur.

Aveți idei?

Răspuns

Utilizați -l sau --files-with-matches care este documentată după cum urmează:

Suprimă ieșirea normală; imprimați în schimb numele fiecărui fișier de intrare din care ar fi fost tipărită în mod normal ieșirea. Scanarea se va opri în primul meci. (-l este specificat de POSIX.)

Deci, pentru exemplul dvs. puteți utiliza următoarele:

$ grep check * -lR 

Comentarii

  • Funcționează și pe MSYS. Excelent!
  • Am folosit grep -rl "text to find" "/usr/share" și a funcționat excelent!

Răspunde

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

Probabil că nu doriți să utilizați opțiunea -R care cu versiunile moderne de GNU grep urmărește legăturile simbolice atunci când coborâți directoare. Utilizați opțiunea -r acolo, care din versiunea 2.12 (aprilie 2012) nu mai urmărește linkurile simbolice.

Dacă grep-ul dvs. nu este cel GNU sau este mai vechi decât versiunea 2.12 sau dacă aveți nevoie de codul dvs. pentru a fi portabil către sistemele GNU non-bleeding-edge, utilizați find comanda de mai sus.

În caz contrar, puteți face:

grep -rl check . 

Nu utilizați * (deoarece acest lucru ar omite fișierele ascunse în directorul curent (și numai în directorul curent) și ar provoca probleme pentru fișierele al căror nume începe cu un -), evitați trecerea opțiuni după argumente ca asta nu este o garanție a funcționat în funcție de mediu și nu este portabil.

Răspuns

Încercați acest lucru:

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

În ceea ce privește steagurile grep

-c returnează un nume de fișier urmat de: și un număr care indică de câte ori apare șirul de căutare în fișierul dat.

-v va prelua ieșirea din primul grep căutați, filtrați fișierele cu zero rezultate și tipăriți doar fișierele cu rezultate diferite de zero.

Comentarii

  • Aceasta va primi un negativ fals dacă aveți fișiere (sau director (i)) ale căror nume conțin :0. Este ' mai bine să faceți grep -v ':0$'. Chiar și asta se va sufoca cu nume de cale care conțin linii noi.

Răspuns

grep -lR "text-to-find" <where-to-find> funcționează bine.

de exemplu, grep -lR "NAVIGATE" . unde găsim cuvântul NAVIGATE în . în directorul curent.

Răspuns

grep -rin „whatToFind” locationToFInd

eg $ grep -rin „vihaan”.

va căuta și lista recursiv numele fișierelor și liniile corespunzătoare care au „vihaan” în ele, „.” se referă la directorul curent.

Răspuns

find . -type f | grep "keyword" * 

căutare în directorul curent. Pentru a căuta din rădăcină, specificați / în loc de .

Răspuns

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

Vă oferă lista de fișiere .q conține cuvântul cheie trim

Lasă un răspuns

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