Shell Linux – Seconda lezione

Creare file di testo, usare cat e lavorare con le wildcards

Lezione pratica di laboratorio con esempi ed esercizi guidati
← Torna alla teoria Linux
Cosa faremo oggi?

In questa lezione impareremo a:

  • creare e modificare file di testo dalla shell usando l’editor nano;
  • visualizzare e concatenare file con il comando cat;
  • utilizzare le wildcards della shell per selezionare gruppi di file;
  • mettere in pratica i concetti con una breve esercitazione finale.
Creare un file con l’editor nano

Per creare un file di testo da terminale utilizzeremo nano, un editor semplice e pensato per essere usato direttamente dalla shell.

Creare o aprire un file:

nano nome_del_file.txt

Se il file non esiste, nano lo crea; se esiste già, lo apre per la modifica.

Salvare e uscire dall’editor:

  • Salvare le modifiche: Ctrl + S
  • Chiudere l’editor: Ctrl + X

Provate voi

Create un file di testo e scrivete un paio di righe:

nano file.txt
Ciao mi chiamo bla bla bla ...
Ctrl + S
Ctrl + X
Comando cat

Il comando cat permette di visualizzare il contenuto di uno o più file di testo.

cat file.txt

Provate voi

Leggete il file che avete appena scritto con nano usando il comando cat.

L’output di cat può essere reindirizzato verso un altro file usando l’operatore >:

cat prova.txt > nuova_prova.txt

In questo modo il contenuto di prova.txt viene copiato nel file nuova_prova.txt.

cat permette anche di concatenare più file in uno solo:

nano prova1.txt
nano prova2.txt
cat prova1.txt prova2.txt > concat_prova_1_2.txt

Ora il file concat_prova_1_2.txt contiene la concatenazione di prova1.txt e prova2.txt.

Wildcards

La shell esegue quella che si chiama wildcard expansion: ogni volta che incontra il carattere * o altre wildcards, lo sostituisce con la lista dei file o delle directory che fanno match.

Esempio

ls *

La shell sostituisce * con la lista di tutti i file e le directory nella cartella corrente. Invece:

ls informatica/*

elenca tutti i file presenti nella directory informatica.

Supponiamo che in informatica ci siano solo tre file: test1, test2 e results. Il comando precedente è equivalente a:

ls informatica/test1 informatica/test2 informatica/results

Se scriviamo:

ls informatica/test*

la wildcard test* fa match solo con test1 e test2, quindi è equivalente a:

ls informatica/test1 informatica/test2
Le principali wildcards
Wildcard Fa match con…
akz il testo esatto akz
* una stringa qualunque (anche vuota)
? un carattere qualunque
[akz] un carattere solo tra a, k e z
[a-z] un carattere alfabetico qualunque
[0-9] una cifra qualunque
[!1b] un carattere qualunque che non sia 1 o b
[!a-e] un carattere qualunque che non sia tra a e e
Un esempio semplice

La wildcard:

le rose sono *se

fa match con:

le rose sono rosse
le rose sono costose
le rose sono grosse

ma non con una frase completamente diversa.

Combinare le wildcards

Esempio di wildcard più articolata:

test?[a-z][!0-9]

Fa match con tutti i percorsi che iniziano con test, proseguono con un carattere qualunque, poi con un carattere alfabetico e infine con un carattere non numerico.

Esempio realistico
cat data/dna-fasta/*.[12]

Qui la wildcard seleziona tutti i file nella directory data/dna-fasta il cui nome termina con .1 oppure .2. Per esempio:

data/dna-fasta/fasta.1
data/dna-fasta/fasta.2

Dopo la wildcard expansion il comando diventa:

cat data/dna-fasta/fasta.1 data/dna-fasta/fasta.2
Provate voi

Create le seguenti directory e sottodirectory:

  1. data
  2. data/deep1
  3. data/deep1/1
  4. data/deep2
  5. data/deep2/1
  6. data/deep3
  7. data/deep3/1
  8. data/deep4
  9. data/deep4/1

Stampate a schermo i contenuti della directory data:

ls data

Per stampare i contenuti di tutte le directory dentro data:

ls data/*

Per stampare il contenuto delle sole directory deep0, …, deep4:

ls data/deep*

Per restringere la wildcard alle directory deep0 e deep3:

ls data/deep[03]

Per le directory deep0, …, deep4 ma escludendo deep2:

ls data/deep[!2]
Esercizi – 10 minuti
  1. Create 3 file usando l’editor nano.
  2. Copiate i 3 file nel folder prova utilizzando il comando cp.
  3. Create un quarto file chiamato concat.txt contenente la concatenazione dei 3 file creati.

Potete verificare il risultato leggendo concat.txt con cat e controllando che contenga il testo di tutti e tre i file originali.