Il nome presa deriva dal comando ed (e vim) g/re/p, che significa cercare globalmente una data espressione regolare e stampare (visualizzare) l'output.
Regolare espressioni
Le utilità consentono all'utente di cercare nei file di testo le righe che corrispondono a un'espressione regolare ( espressione regolare ). Un'espressione regolare è una stringa di ricerca composta da testo e uno o più di 11 caratteri speciali. Un semplice esempio è la corrispondenza dell'inizio di una riga.
File di esempio
La forma base di presa può essere utilizzato per trovare testo semplice all'interno di uno o più file particolari. Per provare gli esempi, creare prima il file di esempio.
Usa un editor come nano o vim per copiare il testo qui sotto in un file chiamato il mio file .
xyz
xyzde
exyzd
dexyz
d?gxyz
xxz
xzz
xz
x*z
xz
x z
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyz
Sebbene tu possa copiare e incollare gli esempi nel testo (nota che le doppie virgolette potrebbero non essere copiate correttamente), i comandi devono essere digitati per impararli correttamente.
Prima di provare gli esempi, visualizza il file di esempio:
$gattoil mio file
Ricerca semplice
Per trovare il testo 'xyz' all'interno del file, eseguire quanto segue:
$presaxyz miofileUso dei colori
Per visualizzare i colori, usa –color (un doppio trattino) o crea semplicemente un alias. Per esempio:
$presa --colorexyz miofileo
$alias presa= 'presa--colore'$presaxyz miofile
Opzioni
Opzioni comuni utilizzate con il presa comando include:
- -trovo tutte le righe a prescindere del caso
- -C contare quante righe contengono il testo
- -n riga di visualizzazione numeri di linee abbinate
- -l display only file nomi quella partita
- -R ricorsivo ricerca di sottodirectory
- -v trova tutte le righe NON contenente il testo
Per esempio:
$presa -ioxyz miofile# trova il testo indipendentemente dal caso$presa -circuito integratoxyz miofile# conta le righe con il testo
$presa -inxyz miofile# mostra i numeri di riga
Crea più file
Prima di provare a cercare più file, crea prima diversi nuovi file:
$buttato fuorixyz>miofile1$buttato fuori -exyz xzz XYZ>miofile2
$buttato fuori -exxx yyy>miofile3
$gattomiofile1
$gattomiofile2
$gattomiofile3
Cerca più file
Per cercare più file utilizzando nomi di file o un carattere jolly, immettere:
$presa -circuito integratoxyz miofile miofile1 miofile2 miofile3$presa -inxyz mio*
# corrisponde a nomi di file che iniziano con 'mio'
Esercizio I
- Prima conta quante righe ci sono nel file /etc/passwd.
- Ora trova tutte le occorrenze del testo dove nel file /etc/passwd .
- Trova quante righe nel file contengono il testo
- Trova quante righe NON contengono il testo dove .
- Trova la voce per il tuo login nel /etc/passwd
Le soluzioni per gli esercizi si trovano alla fine di questo articolo.
Utilizzo delle espressioni regolari
Il comando presa può essere utilizzato anche con le espressioni regolari utilizzando uno o più degli undici caratteri speciali o simboli per affinare la ricerca. Un'espressione regolare è una stringa di caratteri che include caratteri speciali per consentire la corrispondenza dei modelli all'interno di utilità come presa , sono venuto e sed . Si noti che potrebbe essere necessario racchiudere le stringhe tra virgolette.
I caratteri speciali disponibili includono:
^ | Inizio di una linea |
$ | Fine di una linea |
. | Qualsiasi carattere (tranne newline) |
* | 0 o più dell'espressione precedente |
Precedere un simbolo lo rende un carattere letterale |
Nota che *, che può essere usato nella riga di comando per abbinare qualsiasi numero di caratteri incluso nessuno, è non usato allo stesso modo qui.
Si noti inoltre l'uso delle virgolette negli esempi seguenti.
Esempi
Per trovare tutte le righe che iniziano con il testo utilizzando il carattere ^:
$presa'^xyz' miofilePer trovare tutte le righe che terminano con testo utilizzando il carattere $:
$presa'xyz$' miofilePer trovare righe contenenti una stringa utilizzando entrambi i caratteri ^ e $:
$presa'^xyz$' miofilePer trovare le linee usando il . per abbinare qualsiasi carattere:
$presa'^x.z' miofilePer trovare le righe utilizzando * in modo che corrispondano a 0 o più dell'espressione precedente:
$presa'^xy*z 'miofilePer trovare le righe usando .* per trovare 0 o più caratteri qualsiasi:
$presa'^ X.*z 'miofilePer trovare le linee usando il per sfuggire al carattere *:
$presa'^X*z 'miofilePer trovare il carattere usa:
$presa'\' il mio fileEspressione grep – egrep
Il presa Il comando supporta solo un sottoinsieme delle espressioni regolari disponibili. Tuttavia, il comando egrep:
- consente l'uso completo di tutte le espressioni regolari
- può cercare contemporaneamente più di un'espressione
Notare che le espressioni devono essere racchiuse tra virgolette.
Per usare i colori, usa –color o crea ancora un alias:
$alias egrep='egrep --colore'Per cercarne più di uno regex il egrep comando può essere scritto su più righe. Tuttavia, questo può essere fatto anche usando questi caratteri speciali:
| | Alternanza, l'uno o l'altro |
(…) | Raggruppamento logico di parte di un'espressione |
Questo estrae le righe che iniziano con root, uucp o mail dal file, il | simbolo che indica una delle opzioni.
Il seguente comando sarà non funziona, anche se non viene visualizzato alcun messaggio, poiché la base presa Il comando non supporta tutte le espressioni regolari:
$presa '(^root|^uucp|^mail)' /eccetera/passwdTuttavia, sulla maggior parte dei sistemi Linux il comando grep -E è lo stesso che usare egrep :
$presa -E '(^root|^uucp|^mail)' /eccetera/passwdUtilizzo dei filtri
Tubazioni è 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 appaiono in una pipeline sono spesso indicati come filtri poiché in molti casi setacciano o modificano l'input passato loro prima di inviare il flusso modificato allo standard output.
Nell'esempio seguente, l'output standard da ls -l viene passato come input standard al presa comando. Uscita dal presa il comando viene quindi passato come input al Di più comando.
Questo mostrerà solo le directory in /eccetera :
$ls -l /eccetera|presa'^d'|Di piùI seguenti comandi sono esempi di utilizzo dei filtri:
$ps -ef|presacron $chi|presakdmFile di esempio
Per provare l'esercizio di revisione, creare prima il seguente file di esempio.
Usa un editor come nano o vim per copiare il testo qui sotto in un file chiamato le persone:
J.Smith personale 25000E.Smith personale 25400
Allenamento A.Brown 27500
Formazione C.Brown 23400
(Amministratore) R.Bron 30500
Goodsout T.Smyth 30000
Personale F.Jones 25000
formazione* C.Evans 25500
Goodsout W.Papa 30400
Piano terra T.Smythe 30500
Staff J.Maler 33000
Esercizio II
- Visualizza il file le persone ed esaminarne il contenuto.
- Trova tutte le righe che contengono la stringa fabbro nel file people.Hint: usa il comando grep ma ricorda che per impostazione predefinita fa distinzione tra maiuscole e minuscole.
- Crea un nuovo file, npeople, contenente tutte le righe che iniziano con la stringa Personale nel file people.Suggerimento: usa il comando grep con >.
- Conferma il contenuto del file npeople elencando il file.
- Ora aggiungi tutte le righe in cui il testo termina con la stringa 500 nel file people nel file npeople.Hint: usa il comando grep con >>.
- Ancora una volta, conferma il contenuto del file npeople elencando il file.
- Trova l'indirizzo IP del server che è memorizzato nel file /etc/host .Suggerimento: usa il comando grep con $(hostname)
- Utilizzo egrep estrarre da /etc/passwd file di righe di account contenenti lp o il tuo ID utente .
Le soluzioni per gli esercizi si trovano alla fine di questo articolo.
Più espressioni regolari
Un'espressione regolare può essere pensata come caratteri jolly sugli steroidi.
Ci sono undici caratteri con significati speciali: le parentesi quadre di apertura e chiusura [ ], la barra rovesciata , l'accento circonflesso ^, il simbolo del dollaro $, il punto o punto ., il simbolo della barra verticale o della barra verticale |, il punto interrogativo ?, il asterisco o stella *, il segno più + e la parentesi tonda di apertura e chiusura { }. Questi caratteri speciali sono spesso chiamati anche metacaratteri.
Ecco il set completo di caratteri speciali:
^ | Inizio di una linea |
$ | Fine di una linea |
. | Qualsiasi carattere (tranne newline) |
* | 0 o più dell'espressione precedente |
| | Alternanza, l'uno o l'altro |
[…] | Set esplicito di caratteri da abbinare |
+ | 1 o più dell'espressione precedente |
? | 0 o 1 dell'espressione precedente |
Precedere un simbolo lo rende un carattere letterale | |
{...} | Notazione quantificatrice esplicita |
(…) | Raggruppamento logico di parte di un'espressione |
La versione predefinita di presa ha solo un supporto limitato per le espressioni regolari. Affinché tutti i seguenti esempi funzionino, utilizzare egrep invece o grep -E .
Per trovare le linee usando il | per abbinare una delle due espressioni:
$egrep'xxz|xzz' miofilePer trovare le righe usando | per abbinare entrambe le espressioni all'interno di una stringa utilizzare anche ( ):
$egrep'^X(Yz|yz)' il mio filePer trovare le righe usando [ ] per trovare una corrispondenza con qualsiasi carattere:
$egrep'^X[sì]z 'miofilePer trovare le righe usando [ ] per NON corrispondere a nessun carattere:
$egrep'^X[^ Sì]z 'miofilePer trovare le righe utilizzando * in modo che corrispondano a 0 o più dell'espressione precedente:
$egrep'^xy*z 'miofilePer trovare le righe usando il + per far corrispondere 1 o più dell'espressione precedente:
$egrep'^xy+z' miofilePer trovare le righe utilizzando ? per far corrispondere 0 o 1 dell'espressione precedente:
$egrep'^xy?z' miofileEsercizio III
- Trova tutte le righe che contengono i nomi Evans o pittore nel file persone.
- Trova tutte le righe che contengono i nomi Smith, Smith o Smythe nel file persone.
- Trova tutte le righe che contengono i nomi Marrone, Marrone o Fonte nel file persone. Se hai tempo:
- Trova la riga contenente la stringa (amministratore), comprese le parentesi, nel file persone.
- Trova la riga contenente il carattere * nel file persone.
- Combina 5 e 6 sopra per trovare entrambe le espressioni.
Altri esempi
Per trovare le linee usando . e * per abbinare qualsiasi set di caratteri:
$egrep'^xy.*z 'miofilePer trovare le righe utilizzando { } per abbinare N numero di caratteri:
$egrep'^xy{3}z 'miofile$egrep'^xy{4}z 'miofile
Per trovare le righe utilizzando { } per abbinare N o più volte:
$egrep'^xy{3,}z 'miofilePer trovare le righe usando { } per trovare N volte ma non più di M volte:
$egrep'^xy{2,3}z 'miofileConclusione
In questo tutorial abbiamo prima esaminato l'utilizzo presa nella sua forma semplice per trovare il testo in un file o in più file. Abbiamo quindi combinato il testo da cercare con semplici espressioni regolari e poi con espressioni più complesse utilizzando egrep .
Prossimi passi
Spero che metterete a frutto le conoscenze acquisite qui. Provalo presa comandi sui tuoi dati e ricorda, le espressioni regolari descritte qui possono essere usate nella stessa forma in noi , sed e awk !
Soluzioni per esercizi
Esercizio I
Prima conta quante righe ci sono nel file /etc/passwd .
$ wc -l /etc/passwd
Ora trova tutte le occorrenze del testo dove nel file /etc/passwd.
$ grep var /etc/passwd
Trova quante righe nel file contengono il testo dove
Trova quante righe NON contengono il testo dove .
presa -CVdove/eccetera/passwdTrova la voce per il tuo login nel /etc/passwd file
grep kdm /etc/passwd
Esercizio II
Visualizza il file le persone ed esaminarne il contenuto.
$ cat people
Trova tutte le righe che contengono la stringa fabbro nel file le persone .
$ grep 'Smith' people
Crea un nuovo file, npersone , contenente tutte le righe che iniziano con la stringa Personale nel le persone file
$ grep '^Personal' people> npeople
Conferma il contenuto del file npersone elencando il file.
$ cat npeople
Ora aggiungi tutte le righe in cui il testo termina con la stringa 500 nel file le persone al file npersone .
$ grep '500$' people>>npeople
Ancora una volta, conferma il contenuto del file npersone elencando il file.
$ cat npeople
Trova l'indirizzo IP del server che è memorizzato nel file /etc/host .
$ grep $(hostname) /etc/hosts
Utilizzo egrep estrarre da /etc/passwd file di righe di account contenenti lp o il tuo ID utente.
$ egrep '(lp|kdm:)' /etc/passwd
Esercizio III
Trova tutte le righe che contengono i nomi Evans o pittore nel file le persone .
$ egrep 'Evans|Maler' people
Trova tutte le righe che contengono i nomi fabbro , Smyth o Smythe nel file le persone .
$ egrep 'Sm(i|y)the?' people
Trova tutte le righe che contengono i nomi Marrone , Brown o Fonte nel file persone.
$ egrep 'Brow?e?n' people
Trova la riga contenente la stringa (amministratore), comprese le parentesi, nel file le persone .
Trova la riga contenente il carattere * nel file persone.
$ egrep '*' people
Combina 5 e 6 sopra per trovare entrambe le espressioni.