Il nome grep Viene dal comando ED (e VIM) “G/RE/P”, il che significa cercare a livello globale una data espressione e stampa regolari (display) l'output.
Regolare Espressioni
Le utility consentono all'utente di cercare file di testo per righe che corrispondono a un'espressione regolare (regexp). Un'espressione regolare è una stringa di ricerca composta da testo e uno o più di 11 caratteri speciali. Un semplice esempio è abbinare l'inizio di una linea.
File di esempio
La forma di base di grep può essere utilizzato per trovare un testo semplice all'interno di un determinato file o file. Per provare gli esempi, crea prima il file di esempio.
Utilizzare un editor come Nano o VIM per copiare il testo seguente in un file chiamato il mio file.
XYZ
xyzde
Exyzd
Dexyz
D?Gxyz
xxz
xzz
x \ z
x*z
xz
x z
XYZ
XYYZ
XYZ
XYYZ
XYYYZ
Xyyyyz
Sebbene sia possibile copiare e incollare gli esempi nel testo (si noti che le citazioni doppie potrebbero non copiare correttamente), è necessario digitare comandi per apprendenti correttamente.
Prima di provare gli esempi, visualizzare il file di esempio:
gatto myfileXYZ
Ricerca semplice
Per trovare il testo "XYZ" all'interno del file, eseguire quanto segue:
grep xyz myfileXYZ
Opzioni
Opzioni comuni utilizzate con il grep Il comando include:
Per esempio:
grep -i xyz myfileXYZ
# Trova il testo indipendentemente dal caso
grep -ic xyz myfile7
# Conta le righe con il testo
grep -in xyz myfile1: XYZ
# mostra i numeri di riga
Crea più file
Prima di provare a cercare più file, creare diversi nuovi file:
echo xyz> myfile1XYZ
gatto myfile1
echo -e 'xyz \ nxzz \ nxyz'> myfile2XYZ
gatto myfile2
echo -e 'xxx \ nyyy'> myfile3xxx
gatto myfile3
Cerca più file
Per cercare più file utilizzando filenamames o un jolly immettere:
grep -ic xyz myfile myfile1 myfile2 myfile3myfile: 7
# Match Filienames a partire da "My"myfile: 1: xyz
grep -in xyz mio*
Esercizio I
Suggerimento: usa wc -l /etc /passwd
Le soluzioni di esercizio possono essere trovate alla fine di questo articolo.
Usando espressioni regolari
Il comando grep può anche essere usato con espressioni regolari usando uno o più di undici caratteri speciali o simboli per perfezionare la ricerca. Un'espressione regolare è una stringa di caratteri che include caratteri speciali per consentire la corrispondenza del motivo all'interno delle utility come grep, vim E sed. Si noti che potrebbe essere necessario chiudere le stringhe in virgolette.
I caratteri speciali disponibili includono:
^ | Inizio di una linea |
$ | Fine di una linea |
. | Qualsiasi carattere (tranne \ n newline) |
* | 0 o più dell'espressione precedente |
\ | Precedente un simbolo lo rende un carattere letterale |
Si noti che il *, che può essere utilizzato nella riga di comando per abbinare qualsiasi numero di caratteri incluso nessuno, è non usato allo stesso modo qui.
Nota anche l'uso delle citazioni nei seguenti esempi.
Esempi
Per trovare tutte le righe che iniziano con il testo usando il carattere ^:
grep '^xyz' myfile
Per trovare tutte le righe che terminano con il testo usando il carattere $:
grep 'xyz $' myfile
Per trovare linee contenenti una stringa usando sia i caratteri ^ che $:
grep '^xyz $' myfile
Per trovare linee usando il file . per abbinare qualsiasi personaggio:
grep '^x.z 'myfile
Per trovare linee usando il * per abbinare 0 o più dell'espressione precedente:
grep '^xy*z' myfile
Per trovare linee usando .* per abbinare 0 o più di qualsiasi personaggio:
grep '^x.*z 'myfile
Per trovare linee usando il file \ per sfuggire al * personaggio:
grep '^x \*z' myfile
Per trovare l'uso \ personaggio:
grep '\\' myfile
Espressione grep - egrep
IL grep Il comando supporta solo un sottoinsieme delle espressioni regolari disponibili. Tuttavia, il comando egrep:
Si noti che le espressioni devono essere racchiuse in una coppia di citazioni.
Per cercare più di uno Regex IL egrep Il comando può essere scritto su più righe. Tuttavia, questo può essere fatto anche usando questi personaggi speciali:
| | Alternanza, l'una o l'altra |
(...) | Raggruppamento logico di parte di un'espressione |
egrep '(^root |^uucp |^mail)' /etc /passwd
Questo estrae le righe che iniziano con root, UUCP o posta dal file, il | simbolo che significa una delle opzioni.
Il seguente comando lo farà non lavoro, sebbene non venga visualizzato alcun messaggio, poiché il base grep Il comando non supporta tutte le espressioni regolari:
grep '(^root |^uucp |^mail)' /etc /passwd
Tuttavia, sulla maggior parte dei sistemi Linux il comando grep -e è lo stesso che usare egrep:
grep -e '(^root |^uucp |^mail)' /etc /passwd
Usando i filtri
Tubatura è il processo di invio dell'output di un comando come input in un altro comando ed è uno degli strumenti Linux più potenti disponibili.
I comandi che vengono visualizzati in una pipeline vengono spesso indicati come filtri poiché in molti casi setacciano o modificano l'ingresso passato loro prima di inviare il flusso modificato all'output standard.
Nell'esempio seguente, output standard da ls -l viene passato come input standard al grep comando. Output da grep Il comando viene quindi passato come input al Di più comando.
Questo visualizzerà solo directory in /eccetera:
ls -l /etc | grep '^d' | di più
I seguenti comandi sono esempi di utilizzo dei filtri:
PS -ef | grep cron
chi | grep kdm
File di esempio
Per provare l'esercizio di revisione, crea prima il seguente file di esempio.
Utilizzare un editor come Nano o VIM per copiare il testo seguente in un file chiamato persone:
Personale j.Smith 25000
Personale e.Smith 25400
Formazione a.Brown 27500
Allenamento c.Browen 23400
(Amministratore) r.Bron 30500
Goodsout t.Smyth 30000
Personale f.Jones 25000
Allenamento* c.Evans 25500
Goodsout w.Papa 30400
Groundfloor t.Smythe 30500
Personale j.Maler 33000
Esercizio II
Le soluzioni di esercizio possono essere trovate alla fine di questo articolo.
Espressioni più regolari
Un'espressione regolare può essere pensata come jolly su steroidi.
Ci sono undici caratteri con significati speciali: le staffe quadrate di apertura e chiusura [], The Backslash \, The Caret ^, The Dollar Sign $, il periodo o Dot ., La barra verticale o il simbolo del tubo |, il punto interrogativo ?, l'asterisco o la stella *, il segno più + e la staffa di apertura e chiusura del round . Questi personaggi speciali sono spesso chiamati anche metacharacter.
Ecco il set completo di personaggi speciali:
^ | Inizio di una linea |
$ | Fine di una linea |
. | Qualsiasi carattere (tranne \ n newline) |
* | 0 o più dell'espressione precedente |
| | Alternanza, l'una o l'altra |
[…] | Set esplicito di personaggi da abbinare |
+ | 1 o più dell'espressione precedente |
? | 0 o 1 dell'espressione precedente |
\ | Precedente un simbolo lo rende un carattere letterale |
… | Notazione di quantificatore esplicita |
(...) | Raggruppamento logico di parte di un'espressione |
La versione predefinita di grep ha solo un supporto di espressione regolare limitato. Affinché tutti i seguenti esempi funzionino, usa egrep invece o grep -e.
Per trovare linee usando il file | per abbinare entrambe le espressioni:
egrep 'xxz | xzz' myfile
Per trovare linee usando | Per abbinare entrambe le espressioni all'interno di una stringa usa anche ():
egrep '^x (yz | yz)' myfile
Per trovare linee usando [] per abbinare qualsiasi personaggio:
egrep '^x [yy] z' myfile
Per trovare linee usando [] per non abbinare alcun carattere:
egrep '^x [^yy] z' myfile
Per trovare linee usando il * per abbinare 0 o più dell'espressione precedente:
egrep '^xy*z' myfile
Per trovare linee usando il + per abbinare 1 o più dell'espressione precedente:
egrep '^xy+z' myfile
Per trovare linee usando il file ? per abbinare 0 o 1 dell'espressione precedente:
egrep '^xy?z 'myfile
Esercizio III
Altri esempi
Per trovare linee usando . e * per abbinare qualsiasi insieme di personaggi:
egrep '^xy.*z 'myfile
Per trovare le righe usando per abbinare il numero n di caratteri:
egrep '^xy 3 z' myfile
egrep '^xy 4 z' myfile
Per trovare righe usando per abbinare n o più volte:
egrep '^xy 3, z' myfile
Per trovare righe usando per abbinare n volte ma non più di m:
egrep '^xy 2,3 z' myfile
Conclusione
In questo tutorial abbiamo guardato per la prima volta usando grep Nel suo semplice modulo trovare il testo in un file o in più file. Abbiamo quindi combinato il testo da cercare con semplici espressioni regolari e quindi più complesse usando egrep.
Prossimi passi
Spero che metterai a frutto le conoscenze acquisite. Provare grep Comandi sui tuoi dati e ricorda, espressioni regolari come descritto qui possono essere utilizzate nella stessa forma in vi, sed E Awk!
Soluzioni di esercizio
Esercizio I
Primo conteggio quante righe ci sono nel file /etc/passwd.
wc -l /etc /passwd
Ora trova tutte le occorrenze del testo var Nel file /etc /passwd.
grep var /etc /passwd
Trova quante righe nel file contengono il testo var
grep -c var /etc /passwd
Trova quante righe non contengono il testo var.
grep -cv var /etc /passwd
Trova la voce per il tuo accesso in /etc/passwd file
grep kdm /etc /passwd
Esercizio II
Visualizza il file persone ed esaminare il suo contenuto.
Persone gatto
Trova tutte le righe contenenti la stringa fabbro nel file persone.
Grep 'Smith' People
Crea un nuovo file, npeople, contenente tutte le linee che iniziano con la stringa Personale nel persone file
Grep '^Personal' People> npeople
Conferma il contenuto del file npeople elencando il file.
Cat npeople
Ora aggiungono tutte le righe in cui il testo termina con la stringa 500 nel file persone al file npeople.
Grep '500 $' persone >> npeople
Ancora una volta, conferma il contenuto del file npeople elencando il file.
Cat npeople
Trova l'indirizzo IP del server che è archiviato nel file /etc/host.
grep $ (nome host) /etc /host
Utilizzo egrep per estrarre dal /etc/passwd righe dell'account file contenenti LP o il tuo ID utente.
egrep '(lp | kdm :)' /etc /passwd
Esercizio III
Trova tutte le righe contenenti i nomi Evans O Maler nel file persone.
Egrep 'Evans | Maler' People
Trova tutte le righe contenenti i nomi fabbro, Smyth O Smythe nel file persone.
egrep 'sm (i | y) il?' persone
Trova tutte le righe contenenti i nomi Marrone, Browen O Bron Nel file persone.
Egrep 'Brow?e?N 'People
Trova la linea contenente la stringa (amministratore), comprese le staffe, nel file persone.
$ egrep '\ (admin \)' People
Trova la linea contenente il carattere * Nel file persone.
egrep '\*' persone
Combina 5 e 6 sopra per trovare entrambe le espressioni.
egrep '\ (admin \) | \*' People