cat mostra a schermo il contenuto di un file di testo e permette di unire più file in uno solo. Dopo aver imparato a creare, copiare, spostare ed eliminare i file, è il momento di guardarci dentro.
Cos'è
cat è l'abbreviazione di concatenate, "concatena": il suo scopo originario era unire file uno dopo l'altro. Il fatto che serva anche a leggerli è una conseguenza, perché il risultato della concatenazione viene stampato a schermo. Fa parte del pacchetto GNU coreutils ed è un eseguibile (/usr/bin/cat), presente su qualsiasi distribuzione GNU/Linux.
Cosa fa
Legge i file indicati, nell'ordine in cui li scrivi, e ne stampa il contenuto sullo standard output, cioè di norma il terminale. Se non indichi nessun file, legge ciò che arriva dallo standard input: la tastiera o l'output di un altro comando. Non modifica i file che legge.
Come si usa
Sintassi base:
$ cat [opzioni] [file...]Esempio 1: leggere un file
$ cat lista.txt
mele
pere
aranceEsempio 2: mostrare più file di seguito
$ cat lista.txt note.txt
mele
pere
arance
ricordarsi di comprare il paneI contenuti vengono stampati uno dopo l'altro, senza separatori. Se un file non finisce con un a capo, la sua ultima riga si attacca alla prima del file successivo.
Esempio 3: unire più file in uno nuovo
Combinando cat con il reindirizzamento >, l'output finisce in un file anziché sullo schermo:
$ cat capitolo1.txt capitolo2.txt capitolo3.txt > libro.txtCon >> il testo viene invece aggiunto in fondo a un file esistente:
$ cat nuove_righe.txt >> lista.txtEsempio 4: numerare le righe con -n
$ cat -n lista.txt
1 mele
2 pere
3 aranceCon -b vengono numerate solo le righe non vuote.
Esempio 5: comprimere le righe vuote con -s
Se un file contiene lunghe sequenze di righe vuote, -s (squeeze) le riduce a una sola:
$ cat -s testo_con_buchi.txtEsempio 6: scoprire i caratteri invisibili con -A
L'opzione -A mostra anche i caratteri che di solito non si vedono: $ indica la fine di ogni riga, ^I una tabulazione, ^M un ritorno a capo in stile Windows. È utilissima quando uno script o un file di configurazione "non funziona" senza un motivo apparente:
$ cat -A script.sh
#!/bin/bash^M$
echo "ciao"^M$Quei ^M alla fine delle righe indicano che il file arriva da Windows e può dare errori in Linux.
Esempio 7: scrivere un file dalla tastiera
Senza argomenti, cat legge dalla tastiera. Reindirizzando l'output puoi creare un piccolo file senza aprire un editor:
$ cat > promemoria.txt
Chiamare il tipografo
Preparare la bozza
Per terminare, premi Ctrl+D su una riga vuota. Attenzione: se promemoria.txt esiste già, viene sovrascritto. Con >> aggiungeresti invece il testo in fondo.
Esempio 8: creare un file con più righe (heredoc)
Per scrivere un testo di più righe, soprattutto negli script, si usa la sintassi here document:
$ cat << 'FINE' > config.ini
[sito]
nome=mio_sito
porta=8080
FINETutto ciò che sta tra la prima riga e la parola FINE viene scritto nel file. Le virgolette attorno a FINE impediscono alla shell di interpretare variabili come $HOME dentro il testo.
Esempio 9: cat in una pipeline
L'output di cat può essere passato ad altri comandi con il simbolo |:
$ cat lista.txt | wc -l
3
$ cat lista.txt | sort
arance
mele
pereFunziona, ma spesso non serve: la maggior parte dei comandi legge direttamente un file (wc -l lista.txt, sort lista.txt). Usare cat solo per passare un file a un altro comando è un'abitudine così diffusa che ha un nome scherzoso tra gli esperti: "uso inutile di cat". Non è un errore, ma è un processo in più.
Esempio 10: uso negli script
Per unire tutti i file di log di un mese in uno solo:
#!/bin/bash
cat log_ottobre_*.txt > log_ottobre_completo.txt
echo "Righe totali: $(cat log_ottobre_completo.txt | wc -l)"Opzioni utili
-n: numera tutte le righe.-b: numera solo le righe non vuote.-s: riduce le righe vuote consecutive a una sola.-A: mostra i caratteri invisibili (fine riga, tabulazioni, caratteri di controllo).-E: mostra un$alla fine di ogni riga.-T: mostra le tabulazioni come^I.
Attenzione a
- I file lunghi:
catstampa tutto in una volta e la schermata scorre via. Per i file grandi è più comodo un programma di lettura a pagine comeless, oppureheadetailper vedere solo inizio e fine. - I file binari: stampare un'immagine, un programma o un archivio può riempire il terminale di caratteri strani e renderlo illeggibile. Se succede, scrivi
reset(anche alla cieca) e premi Invio. - Mai
cat file > file: la shell svuota il file di destinazione prima checatlo legga, e perdi tutto il contenuto. Lo stesso vale percat file | sort > filee simili: scrivi su un file diverso e poi rinominalo conmv. >sovrascrive,>>aggiunge: confonderli è un errore classico. Con file importanti usa>>oppure fai prima una copia concp.- File inesistente: se il nome è sbagliato,
catrispondeFile o directory non esistente. Controlla conlse con il completamento automatico (Tab). - Un comando affine:
tac(il nome ècatscritto al contrario) stampa le righe dall'ultima alla prima.
Riepilogo
| Comando | Cosa fa |
|---|---|
cat file | Mostra il contenuto di un file |
cat a b | Mostra più file di seguito |
cat a b > c | Unisce più file in un file nuovo |
cat a >> b | Aggiunge il contenuto di a in fondo a b |
cat -n file | Mostra il file con le righe numerate |
cat -A file | Rivela i caratteri invisibili |
cat > file | Scrive un file dalla tastiera (termina con Ctrl+D) |
tac file | Mostra il file dall'ultima riga alla prima |
Nel prossimo articolo: less, il comando per leggere file lunghi una pagina alla volta.