Comanda Bash grep, căutați o linie în fișiere

grep - Căutați fișiere sau o linie într-un fișier dintr-un șablon.

grep "model de căutare" "nume_fișier"

Să presupunem că avem trei fișiere în / root:
/root/.bash_history
/root/.bash_history
/ root / test

-r Căutați recursiv pentru toate fișierele din directorul specificat. exemplu:

#grep -r autorizat / root

/root/.bash_history:mv authorized_keys authorized_keys2
/root/.bash_history:chmod 600 authorized_keys2
/ root / test: author_keys2 fișier de test

-h Nu afișează numele fișierului când căutați mai multe fișiere. exemplu:

#grep -rată autorizată / rădăcină

mv authorized_keys authorized_keys2
chmod 600 authorized_keys2
file de test authorized_keys2

-l Imprimați numai numele fișierelor în care este găsit șirul. Dacă există mai multe linii în fișier, numele fișierului este afișat o singură dată. exemplu:

#grep -rl autorizat / root

/root/.bash_history
/ root / test

-c Afișează numărul de rânduri găsite. exemplu

#grep -c autorizat /root/.bash_history

3

-v Imprimă toate liniile cu excepția celor care conțin șablonul specificat.

-i Ignoră cazul când căutați. Aceasta este, dacă ați specificat un model de căutare cu litere mici, rezultatul
vor exista și linii în care acest model apare cu majuscule.

-n Adaugă numărul șirului găsit la începutul ieșirii acestuia.

-s Suprimă rezultatul erorilor despre un fișier inexistent, de exemplu.

-• Căutați un șablon ca un singur cuvânt, de exemplu, căutarea pentru -w "auth" nu va include linia în care apare "autentic", ci numai liniile în care există un cuvânt de autor.

grep trebuie să aibă un parametru obligatoriu unde să căutați un șir - acesta este fie un fișier, fie o intrare standard de date.

atunci când dorim să căutăm toate fișierele din dosar și să specificăm numele folderului - nu va arăta în interiorul dosarului în toate fișierele, deoarece comanda ia parametrul dorit numele fișierului în care trebuie căutat.

opțiunea -r spune că trebuie să căutați recursiv, căutând toate fișierele din directorul specificat și din fișierele din toate subfolderele. Aproximativ, obțineți o listă a tuturor fișierelor din toate subfolderele de diferite niveluri din interiorul directorului specificat și efectuați o căutare în aceste fișiere.

Nici măcar nu știu cum să vă explic, astfel încât să nu vă confundați)

Descrierea dvs. este cel mai probabil potrivită pentru un exemplu special de recurs în programare, dar nu se potrivește pe deplin ca un simbol global de recursiune.

De exemplu, pentru a arăta recursiv că într-o matryoshka - aceasta înseamnă a deschide toate păpușile imbricate în mare și a verifica fiecare). Și nu deschideți cel mai mare și spuneți că nu deschide restul celor mai mici. Acesta este în acest context comanda grep

Am înțeles:
#grep authorized / root - căutări numai în directorul / root;
#grep -r authorized / root - caută directorul / rădăcină și toate subdosarele;

Dar, cu cel precedent, sa dat seama în sfârșit:
1) server # grep "12345" 1_check.sh
echo-ne «12345 $«;
ssh 12345 $ 'lsof | wc -l'
2) serverul # grep -r "12345" / racl / ep /
./1_check.sh: echo -na «12345 $«;
./1_check.sh: ssh 12345 $ 'lsof | wc -l'

În primul caz, este căutat în fișierul concatenat,
în al doilea - în toate subfolderele / racl / ep /

Da. găsirea va fi mai de susținere ca și pentru mine, puteți executa comenzi peste rezultatele căutării prin intermediul opțiunilor de căutare diferite. Ei bine, fiecare echipă își îndeplinește sarcina. Cel mai adesea folosesc grep cu -rli. Asta este, scoatem lista de fișiere (-l) recursiv în toate subdirectoarele (-r), în care fraza este găsită fără registru (-i).
Cu rezultatele de grep, puteți lucra prin aplicarea pentru i în buclă. De exemplu, ștergeți toate fișierele care conțin expresia "virus":
pentru că sunt în virusul "grep -rli" "/"; face rm -rf $ i;
bine, și acolo prin punct și virgulă, puteți efectua multe operații diferite asupra rezultatului.
uneori puteți utiliza xargs, în acest caz pentru a șterge fișierele vor fi astfel:
grep -rli "virus" ./ | xargs rm -rf

chiar și în grep este convenabil să efectuați o căutare în mai multe condiții. De exemplu, ieșiți toate fișierele din directorul / root unde există un șir de "rm" sau "cp":
Tasta -E ne ajută să specificăm câțiva termeni de căutare ...
grep -rliE "rm | cp" / rădăcină