Linux Professional Institute Learning Logo.
Torna al contenuto principale
  • Home
    • Tutte le Risorse
    • LPI Learning Materials
    • Collabora
    • Publishing Partner
    • Diventa un Publishing Partner
    • FAQ
    • Collaboratori
    • Contatto
  • LPI.org
3.2 Lezione 2
Argomento 1: La Comunità Linux e una Carriera nell'Open Source
1.1 Evoluzione di Linux e Sistemi Operativi più Diffusi
  • 1.1 Lezione 1
1.2 Principali Applicazioni Open Source
  • 1.2 Lezione 1
1.3 Software e Licenze Open Source
  • 1.3 Lezione 1
1.4 Competenze ICT - Lavorare con Linux
  • 1.4 Lezione 1
Argomento 2: Trovare il Proprio Modo di Operare su un Sistema Linux
2.1 Nozioni di Base sulla Command Line
  • 2.1 Lezione 1
  • 2.1 Lezione 2
2.2 Utilizzo della Command Line per Ottenere Aiuto
  • 2.2 Lezione 1
2.3 Utilizzo di Directory e Elenchi di File
  • 2.3 Lezione 1
  • 2.3 Lezione 2
2.4 Creazione, Spostamento ed Eliminazione di File
  • 2.4 Lezione 1
Argomento 3: Il Potere della Command Line
3.1 Archiviazione dei File sulla Command Line
  • 3.1 Lezione 1
3.2 Ricerca ed Estrazione di Dati dai File
  • 3.2 Lezione 1
  • 3.2 Lezione 2
3.3 Trasformare i Comandi in uno Script
  • 3.3 Lezione 1
  • 3.3 Lezione 2
Argomento 4: Il Sistema Operativo Linux
4.1 Scelta di un Sistema Operativo
  • 4.1 Lezione 1
4.2 Comprendere l'Hardware del Computer
  • 4.2 Lezione 1
4.3 Dove Sono Memorizzati i Dati
  • 4.3 Lezione 1
  • 4.3 Lezione 2
4.4 Il Tuo Computer in Rete
  • 4.4 Lezione 1
Argomento 5: Sicurezza e Permessi sui File
5.1 Sicurezza di Base e Identificazione dei Tipi di Utente
  • 5.1 Lezione 1
5.2 Creazione di Utenti e Gruppi
  • 5.2 Lezione 1
5.3 Gestione delle Autorizzazioni e delle Proprietà dei File
  • 5.3 Lezione 1
5.4 Directory e File Speciali
  • 5.4 Lezione 1
How to get certified
  1. Argomento 3: Il Potere della Command Line
  2. 3.2 Ricerca ed Estrazione di Dati dai File
  3. 3.2 Lezione 2

3.2 Lezione 2

Certificazione:

Linux Essentials

Versione:

1.6

Argomento:

3 Il Potere della Command Line

Obiettivo:

3.2 Ricerca ed Estrazione di Dati dai File

Lezione:

2 di 2

Introduzione

In questa lezione esamineremo gli strumenti utilizzati per manipolare i testi. Questi strumenti vengono utilizzati frequentemente dagli amministratori di sistema o dai programmi per monitorare o identificare automaticamente informazioni ricorrenti specifiche.

Cercare all’interno dei File con grep

Il primo strumento di cui parleremo in questa lezione è il comando grep, acronimo di “global regular expression print”; la sua funzionalità principale è la ricerca di uno specifico pattern all’interno dei file. Il comando restituisce le righe contenenti il pattern specificato, evidenziato in rosso.

$ grep bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
user:x:1001:1001:User,,,,:/home/user:/bin/bash

grep, come la maggior parte dei comandi, può anche modificare il suo comportamento base a seconda delle opzioni utilizzate. Ecco le più comuni:

-i

la ricerca non fa distinzione tra lettere maiuscole e minuscole

-r

la ricerca è ricorsiva (cerca in tutti i file all’interno della directory specificata e delle sue sottodirectory)

-c

la ricerca conta il numero di corrispondenze trovate

-v

inverte la ricerca, restituendo le righe che non hanno corrispondenza con i termini di ricerca

-E

attiva le espressioni regolari estese (necessarie per alcuni dei meta-caratteri più avanzati come | , + e ?)

grep ha molte altre opzioni utili. Consulta la pagina man per saperne di più.

Espressioni Regolari

Il secondo strumento è molto potente. Viene utilizzato per descrivere frammenti di testo all’interno dei file, detti anche espressioni regolari. Le espressioni regolari sono estremamente utili per estrarre dati da file di testo attraverso la costruzione di pattern. Sono comunemente usati all’interno di script o nella programmazione con linguaggi di alto livello, come Perl o Python.

Quando si lavora con le espressioni regolari è molto importante tenere presente che conta ogni carattere e che il pattern viene scritto con lo scopo di trovare una corrispondenza con una specifica sequenza di caratteri, nota anche come stringa. La maggior parte dei pattern utilizza i normali simboli ASCII: lettere, cifre, punteggiatura o altri simboli, ma può anche utilizzare caratteri Unicode per indicare la corrispondenza con qualsiasi altro tipo di testo.

Il seguente elenco indica i meta-caratteri delle espressioni regolari utilizzati per formare i pattern.

.

Corrisponde a qualsiasi singolo carattere (tranne il carattere di nuova riga)

[abcABC]

Corrisponde a qualsiasi carattere all’interno delle parentesi

[^abcABC]

Corrisponde a qualsiasi carattere tranne quelli racchiusi tra parentesi

[a-z]

Corrisponde a qualsiasi carattere nell’intervallo indicato

[^a-z]

Corrisponde a qualsiasi carattere tranne quelli nell’intervallo indicato

sun|moon

Trova una qualsiasi delle stringhe indicate

^

Inizio di una riga

$

Fine di una riga

Tutte le funzionalità delle espressioni regolari possono essere implementate anche in grep. Puoi notare che nell’esempio precedente la parola non è racchiusa tra virgolette doppie. Per evitare che la shell interpreti i ​​meta-caratteri, si consiglia di inserire i pattern più complessi tra virgolette doppie (" "). All’atto pratico, utilizzeremo le virgolette doppie durante l’implementazione delle espressioni regolari. Le altre virgolette mantengono la loro normale funzionalità, come discusso nelle lezioni precedenti.

I prossimi esempi evidenziano il funzionamento delle espressioni regolari. Avremo bisogno di dati all’interno del file: pertanto, la prossima serie di comandi aggiungerà semplicemente stringhe diverse al file text.txt.

$ echo "aaabbb1" > text.txt
$ echo "abab2" >> text.txt
$ echo "noone2" >> text.txt
$ echo "class1" >> text.txt
$ echo "alien2" >> text.txt
$ cat text.txt
aaabbb1
abab2
noone2
class1
alien2

Il primo esempio mostra una combinazione di ricerche all’interno del file senza e con le espressioni regolari. Per comprendere appieno le espressioni regolari, è molto importante mostrare la differenza tra le due ricerche. Il primo comando cerca la stringa esatta in un qualsiasi punto della riga, mentre il secondo comando cerca gli insiemi di caratteri che contengono uno qualsiasi dei caratteri tra parentesi. Pertanto i risultati dei comandi saranno diversi.

$ grep "ab" text.txt
aaabbb1
abab2
$ grep "[ab]" text.txt
aaabbb1
abab2
class1
alien2

La seconda serie di esempi mostra l’utilizzo dei meta-caratteri di inizio e fine riga. È molto importante sottolineare la necessità di posizionare i 2 caratteri al posto giusto all’interno dell’espressione. Quando si specifica l’inizio della riga, il meta-carattere deve essere posizionato prima dell’espressione, mentre quando si specifica la fine della riga, il meta-carattere deve essere posizionato dopo l’espressione.

$ grep "^a" text.txt
aaabbb1
abab2
alien2
$ grep "2$" text.txt
abab2
noone2
alien2

Oltre ai meta-caratteri spiegati sopra, le espressioni regolari hanno anche meta-caratteri che consentono la moltiplicazione del pattern precedente:

*

Zero o più occorrenze del pattern precedente

+

Una o più occorrenze del pattern precedente

?

Zero o una occorrenza del pattern precedente

In base ai meta-caratteri moltiplicatori, il comando seguente ricerca una stringa che contenga ab, un singolo carattere e uno o più dei caratteri trovati in precedenza. Il risultato mostra che grep ha trovato la stringa aaabbb1 (la parte per la quale si ha corrispondenza è abbb) e la stringa abab2. Poiché il carattere + è un carattere delle espressioni regolari estese, dobbiamo passare l’opzione -E al comando grep.

$ grep -E "ab.+" text.txt
aaabbb1
abab2

Gran parte dei meta-caratteri sono autoesplicativi, ma all’inizio possono risultare un po' complicati. Gli esempi precedenti rappresentano una piccola parte delle funzionalità delle espressioni regolari: prova tutti i meta-caratteri della tabella sopra riportata per capire meglio come funzionano.

Esercizi Guidati

Utilizzando grep e il file /usr/share/hunspell/en_US.dic, trova le righe che corrispondono ai seguenti criteri:

  1. Tutte le righe che contengono la parola cat in un qulunque punto della riga.

  2. Tutte le righe che non contengono nessuno dei seguenti caratteri: sawgtfixk.

  3. Tutte le righe che iniziano con 3 lettere qualsiasi e la parola dig.

  4. Tutte le righe che finiscono con almeno una e.

  5. Tutte le righe che contengono una delle seguenti parole: org, kay o tuna.

  6. Il numero delle righe che iniziano con una o nessuna c seguita dalla stringa ati.

Esercizi Esplorativi

  1. Individua l’espressione regolare che ha corrispondenza con le parole nella riga “Include” e non ha corrispondenza con quelle nella riga “Esclude”:

    • Include: pot, spot, apot

      Esclude: potic, spots, potatoe

    • Include: arp99, apple, zipper

      Esclude: zoo, arive, attack

    • Include: arcane, capper, zoology

      Esclude: air, coper, zoloc

    • Include: 0th/pt, 3th/tc, 9th/pt

      Esclude: 0/nm, 3/nm, 9/nm

    • Include: Hawaii, Dario, Ramiro

      Esclude: hawaii, Ian, Alice

  2. Quale altro utile comando è comunemente usato per cercare all’interno dei file? Quali funzionalità aggiuntive ha?

  3. Scegli uno degli esempi della lezione precedente e, con l’aiuto di grep, prova a cercare un pattern specifico all’interno dell’output del comando.

Sommario

In questa lezione hai imparato:

  • I meta-caratteri delle espressioni regolari;

  • Come creare pattern con le espressioni regolari;

  • Come cercare all’interno dei file.

Comandi utilizzati negli esercizi:

grep

Cerca caratteri o stringhe all’interno di un file

Risposte agli Esercizi Guidati

Utilizzando grep e il file /usr/share/hunspell/en_US.dic, trova le righe che corrispondono ai seguenti criteri:

  1. Tutte le righe che contengono la parola cat in un qulunque punto della riga.

    $ grep "cat" /usr/share/hunspell/en_US.dic
    Alcatraz/M
    Decatur/M
    Hecate/M
    ...
  2. Tutte le righe che non contengono nessuno dei seguenti caratteri: sawgtfixk.

    $ grep -v "[sawgtfixk]" /usr/share/hunspell/en_US.dic
    49269
    0/nm
    1/n1
    2/nm
    2nd/p
    3/nm
    3rd/p
    4/nm
    5/nm
    6/nm
    7/nm
    8/nm
    ...
  3. Tutte le righe che iniziano con 3 lettere qualsiasi e la parola dig.

    $ grep "^...dig" /usr/share/hunspell/en_US.dic
    cardigan/SM
    condign
    predigest/GDS
    ...
  4. Tutte le righe che finiscono con almeno una e.

    $ grep -E "e+$" /usr/share/hunspell/en_US.dic
    Anglicize
    Anglophobe
    Anthropocene
    ...
  5. Tutte le righe che contengono una delle seguenti parole: org, kay o tuna.

    $ grep -E "org|kay|tuna" /usr/share/hunspell/en_US.dic
    Borg/SM
    George/MS
    Tokay/M
    fortunate/UY
    ...
  6. Il numero delle righe che iniziano con una o nessuna c seguita dalla stringa ati.

    $ grep -cE "^c?ati" /usr/share/hunspell/en_US.dic
    3

Risposte agli Esercizi Esplorativi

  1. Individua l’espressione regolare che ha corrispondenza con le parole nella riga “Include” e non ha corrispondenza con quelle nella riga “Esclude”:

    • Include: pot, spot, apot

      Esclude: potic, spots, potatoe

      Soluzione: pot$

    • Include: arp99, apple, zipper

      Esclude: zoo, arive, attack

      Soluzione: p+

    • Include: arcane, capper, zoology

      Esclude: air, coper, zoloc

      Soluzione: arc|cap|zoo

    • Include: 0th/pt, 3th/tc, 9th/pt

      Esclude: 0/nm, 3/nm, 9/nm

      Soluzione: [0-9]th.+

    • Include: Hawaii, Dario, Ramiro

      Esclude: hawaii, Ian, Alice

      Soluzione: ^[A-Z]a.*i+

  2. Quale altro utile comando è comunemente usato per cercare all’interno dei file? Quali funzionalità aggiuntive ha?

    Il comando sed. Questo comando può trovare e sostituire caratteri o set di caratteri all’interno di un file.

  3. Scegli uno degli esempi della lezione precedente e, con l’aiuto di grep, prova a cercare un pattern specifico all’interno dell’output del comando.

    Attenzione: ho scelto una delle risposte degli Esercizi Esplorativi e ho cercato la riga che ha i permessi di lettura, scrittura ed esecuzione per il gruppo. La tua risposta potrebbe essere diversa, a seconda del comando che hai scelto e del pattern che hai creato.

    $ cat contents.txt | tr -s " " | grep "^....rwx"

    Questo esercizio serve per mostrarti che grep può anche ricevere un input da diversi comandi e può essere utile per filtrare le informazioni generate.

Linux Professional Institute Inc. Tutti i diritti riservati. Visita il sito Learning Materials: https://learning.lpi.org
Quest'opera è sotto la licenza 'Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License'.

Prossima Lezione

3.3 Trasformare i Comandi in uno Script (3.3 Lezione 1)

Leggi la prossima Lezione

Linux Professional Institute Inc. Tutti i diritti riservati. Visita il sito Learning Materials: https://learning.lpi.org
Quest'opera è sotto la licenza 'Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License'.

LPI è una organizzazione non-profit.

© 2023 Linux Professional Institute (LPI) è lo standard di certificazione globale e l'organizzazione di supporto alla carriera per i Professionisti Open Source. Con più di 200,000 titolari di Certificazione, è il primo e il più grande ente di Certificazione Open Source e Linux vendor-neutral. LPI ha professionisti certificati in oltre 180 Paesi, offre i suoi Esami in più lingue e ha centinaia di Partner di formazione in tutto il mondo.

La nostra missione è promuovere l'uso dell'Open Source supportando le persone che vi lavorano.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Contattaci
  • Privacy & Cookie Policy

Trovato un errore? Per favore scrivi a contattaci.

© 1999–2023 The Linux Professional Institute Inc. Tutti i diritti riservati.