9.Linux для Начинающих - Комманда grep и Регулярные Выражения
Cuprins:
- Sintaxa Grep Command
- Cum să utilizați
greppentru a căuta o șir în fișiere - Invertiți meciul (exclude)
- Cum să utilizați Grep pentru a căuta o șir în ieșirea de comandă
- Căutare recursivă
- Afișați numai numele de fișier
- Căutare insensibilă a cazurilor
- Căutați cuvinte complete
- Afișați numerele de linie
- Meciuri de numărare
- Căutați mai multe șiruri (tipare)
- Modul linistit
- Expresie regulată de bază
- Expresii regulate extinse
- Tipăriți linii înainte de o potrivire
- Tipărirea liniilor după o potrivire
- Concluzie
Comanda
grep
care înseamnă „imprimare globală expresie regulată” este una dintre cele mai puternice și utilizate în mod obișnuit în Linux.
Grep caută unul sau mai multe fișiere de intrare pentru linii care se potrivesc cu un model dat și scrie fiecare linie de potrivire la ieșirea standard. Dacă nu sunt specificate fișiere,
grep
citește din intrarea standard, care este de obicei ieșirea unei alte comenzi.
În acest tutorial, vă vom arăta cum să utilizați comanda
grep
prin exemple practice și explicații detaliate ale celor mai comune opțiuni GNU
grep
.
Sintaxa Grep Command
Înainte de a intra în modul de utilizare a comenzii
grep
, să începem prin revizuirea sintaxei de bază.
Expresiile
grep
următoarea formă:
grep PATTERN
Articolele din paranteze pătrate sunt opționale.
-
OPTIONS- Zero sau mai multe opțiuni. Grep oferă o serie de opțiuni care îi controlează comportamentul.PATTERN- model de căutare.FILE- Zero sau mai multe nume de fișiere de intrare.
Pentru a putea căuta fișierul, utilizatorul care execută comanda trebuie să aibă acces de citire la fișier.
Cum să utilizați
grep
pentru a căuta o șir în fișiere
Cea mai de bază utilizare a comenzii
grep
este de a căuta un șir (text) într-un fișier.
De exemplu, pentru a afișa liniile din
/etc/passwd
care conține șirul
bash
puteți utiliza următoarea comandă:
grep bash /etc/passwd
Produsul ar trebui să arate așa:
root:x:0:0:root:/root:/bin/bash linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Dacă șirul include spații, trebuie să-l adăugați în ghilimele simple sau duble:
grep "Gnome Display Manager" /etc/passwd
Invertiți meciul (exclude)
Pentru a afișa liniile care nu corespund unui tipar, utilizați opțiunea
-v
(sau -
--invert-match
).
De exemplu, pentru a afișa liniile din
/etc/passwd
care nu conțin șirul
nologin
puteți utiliza următoarea comandă:
grep -v nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash colord:x:124:124::/var/lib/colord:/bin/false git:x:994:994:git daemon user:/:/usr/bin/git-shell linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Cum să utilizați Grep pentru a căuta o șir în ieșirea de comandă
În loc să specificați fișierele de intrare, puteți conducta ieșirea unei alte comenzi pentru
grep
, apoi puteți afișa doar linii care se potrivesc cu un model dat.
De exemplu, pentru a afla care sunt procesele care se execută pe sistemul dvs. ca utilizator
www-data
puteți utiliza următoarea comandă
ps
:
ps -ef | grep www-data
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
Puteți înlătura, de asemenea, mai multe țevi la comandă. După cum puteți vedea în ieșirea de mai sus, există și o linie care conține procesul
grep
. Dacă nu doriți ca această linie să fie afișată, treceți ieșirea la o altă instanță
grep
așa cum se arată mai jos.
ps -ef | grep www-data | grep -v grep
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
Căutare recursivă
Pentru a căuta recursiv un model, utilizați opțiunea
-r
(sau
--recursive
). Aceasta va căuta prin toate fișierele din directorul specificat, sărind cu simbolurile întâlnite în mod recursiv. Pentru a urmări toate legăturile simbolice, utilizați opțiunea
-R
(sau -
--dereference-recursive
).
În următorul exemplu, căutăm șirul
linuxize.com
în toate fișierele din directorul
/etc
:
grep -r linuxize.com /etc
Comanda va imprima liniile de potrivire prefixate de calea completă către fișier.
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com;
Dacă în schimb
-r
utilizați opțiunea
-R
grep
va urma toate legăturile simbolice:
grep -R linuxize.com /etc
Observați ultima linie de ieșire. Acea linie nu este tipărită în exemplul de mai sus, deoarece fișierele din directorul
sites-enabled
Nginx sunt simboluri către fișierele de configurare din directorul
sites-available
.
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com; /etc/nginx/sites-enabled/linuxize.com: server_name linuxize.com www.linuxize.com;
Afișați numai numele de fișier
Pentru a suprima ieșirea
grep
implicită și a tipări doar numele fișierelor care conțin modelul potrivit, puteți utiliza opțiunea
-l
(sau -
--files-with-matches
).
De exemplu, să căutați toate fișierele care se termină cu
.conf
în directorul de lucru curent și să imprimați numai numele fișierelor care conțin șirul
linuxize.com
tip:
grep -l linuxize.com *.conf
Rezultatul va arăta astfel:
tmux.conf haproxy.conf
Opțiunea
-l
este utilizată de obicei în combinație cu opțiunea recursivă
-R
:
Căutare insensibilă a cazurilor
În mod implicit, comanda
grep
este sensibilă cu litere mari și mici. Aceasta înseamnă că caracterele cu majuscule și minuscule sunt tratate ca fiind distincte.
Pentru a ignora cazul atunci când căutați, utilizați opțiunea
-i
(sau
--ignore-case
).
De exemplu, atunci când căutați
Zebra
fără nicio opțiune, următoarea comandă nu va afișa nicio ieșire, adică există linii de potrivire:
grep Zebra /usr/share/words
Dar dacă efectuați o căutare nesensibilă între majuscule și minuscule folosind opțiunea
-i
, aceasta se va potrivi cu litere mari și minuscule:
grep -i Zebra /usr/share/words
Specificarea „Zebra” se va potrivi cu „zebra”, „ZEbrA” sau orice altă combinație de litere mari și minuscule pentru șirul respectiv.
Căutați cuvinte complete
Când căutați „gnu”,
grep
va tipări și liniile în care „gnu” este încorporat în cuvinte mai mari, cum ar fi „cygnus” sau „magnum”.
grep gnu /usr/share/words
cygnus gnu interregnum lgnu9d lignum magnum magnuson sphagnum wingnut
Pentru a returna numai acele linii în care șirul specificat este un cuvânt întreg (închis de caractere non-cuvânt), utilizați opțiunea
-w
(sau -
--word-regexp
).
az
,
AZ
și
0-9
) și caractere mici (
_
). Toate celelalte personaje sunt considerate caractere non-cuvinte.
grep -w gnu /usr/share/words
Afișați numerele de linie
Pentru a afișa numărul de linii care conțin un șir care se potrivește cu un model, utilizați opțiunea
-n
(sau -
--line-number
). Când utilizați această opțiune,
grep
va imprima meciurile la ieșirea standard prefixată cu numărul de linie în care a fost găsită.
De exemplu, pentru a afișa liniile din
/etc/services
care conține string
bash
prefixat cu numărul de linie potrivită, puteți utiliza următoarea comandă:
grep -n 10000 /etc/services
Rezultatul de mai jos ne arată că meciurile se găsesc pe liniile 10423 și 10424.
10423:ndmp 10000/tcp 10424:ndmp 10000/udp
Meciuri de numărare
Pentru a imprima un număr de linii care se potrivesc la ieșirea standard, utilizați opțiunea
-c
(sau
--count
).
În exemplul de mai jos, numărăm conturile care au
/usr/bin/zsh
ca un shell.
grep -c '/usr/bin/zsh' /etc/passwd
Căutați mai multe șiruri (tipare)
Două sau mai multe modele de căutare pot fi unite utilizând operatorul SA
|
.
În mod implicit,
grep
interpretează modelul ca o expresie regulată de bază în care meta-caracterele cum ar fi
|
își pierd semnificația specială și trebuie utilizate versiunile din spate.
În exemplul de mai jos, căutăm toate aparițiile cuvintelor
fatal
,
error
și
critical
în fișierul de eroare Nginx log:
grep 'fatal\|error\|critical' /var/log/nginx/error.log
grep -E 'fatal|error|critical' /var/log/nginx/error.log
Modul linistit
-q
(sau
--quiet
) îi spune lui
grep
să nu scrie nimic terminalului (ieșire standard). Dacă se găsește o potrivire, comanda va ieși cu starea
0
. Acest lucru este util atunci când utilizați
grep
în scripturile shell unde doriți să verificați dacă un fișier conține un șir și efectuați o anumită acțiune în funcție de rezultat.
Iată un exemplu de utilizare a
grep
într-un mod liniștit ca comandă de test într-o declarație
if
:
if grep -q PATTERN filename then echo pattern found else echo pattern not found fi
Expresie regulată de bază
GNU Grep are două seturi de funcții de expresie obișnuite, Basic și Extended. În mod implicit,
grep
interpretează modelul ca o expresie regulată de bază.
Când sunt utilizate în modul expresie regulată de bază, toate celelalte caractere, cu excepția meta-caracterelor, sunt de fapt expresii obișnuite care se potrivesc singure. Mai jos este o listă de meta-caractere utilizate cel mai des:
-
Utilizați simbolul
^(caret) pentru a potrivi expresia la începutul unei linii. În exemplul următor, șirul^kangaroova potrivi numai dacă apare chiar la începutul unei linii.grep "^kangaroo" file.txtUtilizați simbolul
$(dolar) pentru a potrivi expresia de la sfârșitul unei linii. În exemplul următor,kangaroo$șirkangaroo$va potrivi numai dacă apare la sfârșitul unei linii.grep "kangaroo$" file.txtFolosiți butonul
.(perioada) simbol pentru a se potrivi cu orice personaj. De exemplu, pentru a se potrivi cu orice lucru care începe cukanatunci are două caractere și se încheie cu șirulroo, puteți utiliza următorul model:grep "kan..roo" file.txtUtilizare
(paranteze) pentru a se potrivi cu un singur caracter inclus în paranteze. De exemplu, găsiți liniile care conținacceptsau „accent, puteți utiliza următorul model:grep "accet" file.txtUtilizare
(paranteze) pentru a se potrivi cu un singur caracter inclus în paranteze. Următorul model se va potrivi cu orice combinație de șiruri care conținco(any_letter_except_l)a, cum ar ficoca,cobaltși așa mai departe, dar nu va corespunde liniilor care conțincola,grep "coa" file.txt
Pentru a scăpa de semnificația specială a personajului următor, utilizați simbolul
\
(backslash).
Expresii regulate extinse
Pentru a interpreta modelul ca o expresie regulată extinsă, folosiți opțiunea
-E
(sau
--extended-regexp
). Expresiile regulate extinse includ toate meta-caracterele de bază, împreună cu meta-caractere suplimentare pentru a crea tipare de căutare mai complexe și puternice. Mai jos sunt câteva exemple:
-
Potriviți și extrageți toate adresele de e-mail dintr-un fișier dat:
grep -E -o "\b+@+\.{2, 6}\b" file.txtPotriviți și extrageți toate adresele IP valide dintr-un fișier dat:
grep -E -o '(25|2|??)\.(25|2|??)\.(25|2|??)\.(25|2|??)' file.txt
Opțiunea
-o
este utilizată pentru a imprima doar șirul care se potrivește.
Tipăriți linii înainte de o potrivire
Pentru a imprima un anumit număr de linii înainte de potrivirea liniilor, utilizați opțiunea
-B
(sau
--before-context
).
De exemplu, pentru a afișa cinci linii de context principal înainte de potrivirea liniilor, ar trebui să utilizați următoarea comandă:
Tipărirea liniilor după o potrivire
Pentru a imprima un anumit număr de linii după potrivirea liniilor, utilizați opțiunea
-A
(sau - după
--after-context
).
De exemplu, pentru a afișa cinci linii de context continuu după potrivirea liniilor, ar trebui să folosiți următoarea comandă:
Concluzie
Comanda
grep
vă permite să căutați un model în fișiere. Dacă se găsește o potrivire, grep va imprima liniile care conțin modelul specificat.
Există multe altele pentru a afla despre Grep pe pagina manualului utilizatorului Grep.
terminal grepGăsiți informații în fișiere text Fișiere index Căutare cuvinte Lite
Index Căutare fișiere Words Lite este ca și propria dvs. Google ... pentru cât de multe fișiere text sunt pe hard diskul dvs.
Când deschideți orice folder în Windows 10/8/7, Explorer de fișiere va afișa de obicei următoarele detalii despre obiecte - nume, modificare dată, Etc. Dacă doriți, puteți afișa informații suplimentare sau detalii despre obiecte, fie că sunt fișiere de document, fișiere imagine, fișiere video sau directoare.
Să vedem cum putem alege detaliile folderului pentru afișare și afișare informații suplimentare în coloanele Windows File Explorer
Să presupunem că aveți un fișier de 100 .mp4, 150 de fișiere .mkv, 200 de imagini .png și alte fișiere .txt și .docx într-un singur folder. Acum, doriți să le organizați în funcție de formatele de fișiere. De exemplu, doriți să creați un folder separat pentru videoclipuri, imagini și documente. Dacă doriți să le sortați manual în funcție de File Extension și File Type, ar fi o sarcină dificilă dacă aveți mii de fișiere într-un singur dosar. Trebuie să le selectați înainte de a vă deplasa. În caz
Pentru a vă ajuta în această problemă,







