Un file di testo è quello che può essere letto così com'è senza particolari interpretazioni. Il modo con qui questo file viene definito chiarisce anche il tipo di contenuto che questo può avere: testo puro, senza altre informazioni.
I file di testo sono una sequenza di caratteri e simboli, convenzionalmente separata in righe di lunghezze diseguali, e per questo terminate attraverso un codice particolare.
La tabella (seguente) elenca i programmi a cui si accenna in questo capitolo.
Questo codice di conclusione delle righe cambia a seconda del sistema operativo.
Negli ambienti Unix si usa il codice 0x0A che viene chiamato
Quando si vuole fare riferimento al codice di conclusione di riga in modo astratto, cioè senza volere restare legati a una particolare architettura di sistema, si parla di newline.
La maggior parte dei programmi di utilità generale utilizzati all'interno di Linux è di provenienza GNU. Gli scopi del progetto GNU fanno sì che l'intento principale nella realizzazione di questi programmi sia la loro massima portabilità. In questo senso, nella documentazione di questi si fa sempre riferimento a codici newline, lasciando all'utente l'onere di sapere cosa significhi questo nel proprio sistema operativo.
Per quanto riguarda Linux, newline=
Nei file di testo, gli ``spazi'' sono un concetto prettamente visivo: quando si visualizza (o si stampa) un file si notano delle zone in cui non appaiono caratteri di alcun tipo.
I caratteri attraverso i quali si ottengono questi spazi sono normalmente: lo spazio vero e proprio (0x30), la tabulazione (0x09) e newline (0x0A).
Il valore che possono avere gli spazi dipende dal contesto. Ciò che conta è sapere distinguere tra ``spazio'' in senso generale e ``carattere spazio'' che è invece un codice particolare.
A volte si utilizza il termine blank per indicare uno spazio in senso generale, e di norma si intende fare riferimento indifferentemente a un numero imprecisato di caratteri spazio o tabulazione.
Newline entra in gioco quando si ha a che fare con righe vuote. Una riga di questo tipo può contenere spazi di vario genere (spazio e tabulazione) e poi deve essere conclusa da newline. Ma una riga ``vuota'', blank line, può essere veramente vuota e contenere soltanto il codice newline.
I programmi descritti nelle sezioni seguenti, che fanno parte delle GNU text utilities (si riconoscono facilmente perché permettono di utilizzare opzioni descrittive e non solo quelle composte da una sola lettera), accettano le opzioni seguenti.
-
-
help
Emette un breve riassunto della sintassi e delle opzioni disponibili.
-
-
version
Emette il numero della versione.
-
Un singolo trattino isolato indica esplicitamente di utilizzare quanto proveniente dallo standard input
Generalmente, se ciò può avere senso, quando non viene fornito alcun file negli argomenti, si intende che si vuole sia utilizzato lo standard input.
Alcuni programmi per l'elaborazione di file di testo emettono lo stesso file fornito come input, eventualmente dopo un qualche tipo di elaborazione elementare.
Il più semplice di questi programmi è cat che nella maggior parte dei casi viene utilizzato senza opzioni, per lo più con lo scopo di iniziare una pipeline.
cat [<opzioni>]
[<file>... ]
cat emette di seguito i file indicati come argomento attraverso lo standard output, in pratica qualcosa di simile al comando type del Dos.
-
b | -
-
number-
nonblank
Numera tutte le righe emesse, che non sono vuote, a partire da 1.
-
s | -
-
squeeze-
blank
Sostituisce le righe vuote multiple con una sola riga bianca.
-
v | -
-
show-
nonprinting
Sostituisce i caratteri non stampabili con una sigla
che inizia con un accento circonflesso
(^) o con la sigla
M-
a seconda che si tratti di un
codice con il primo bit a zero oppure a uno.
Sono esclusi
-
E | -
-
show-
ends
Visualizza la fine di ogni riga aggiungendo il simbolo $.
-
T | -
-
show-
tabs
Mostra esplicitamente il carattere
-
A | -
-
show-
all
Mostra tutti i simboli non stampabili.
È equivalente a -
vET.
tac [<opzioni>] [<file>... ]
tac emette attraverso lo standard output i file forniti come argomento, invertendo l'ordine dei record. In pratica, tac è l'inverso di cat.
In linea di massima si può dire che i record corrispondano alle righe, e ciò finché non viene definito un tipo di separatore dei record diverso dal solito newline.
-
s <separatore> | -
-
separator=<separatore>
Permette di definire il separatore da usare per distinguere i record.
nl [<opzioni>] [<file>... ]
nl emette attraverso lo standard output il contenuto dei file forniti come argomento con l'aggiunta dei numeri di riga per alcune o tutte le righe dell'input. Il conteggio delle righe viene fatto unendo i file forniti come argomento, come se si trattasse di un unico file e si azzera ogni volta che viene riconosciuto l'inizio di una pagina logica. Sotto questo punto di vista, una pagina logica è composta da tre parti: testata, corpo e piede.
Vedere info nl oppure nl(1).
od converte i file forniti come input in ottale o in altri formati.
Vedere info od oppure od(1).
rev [<file>... ]
Emette attraverso lo standard output il file fornito come argomento, rovesciando l'ordine dei caratteri di ogni riga.
Alcuni programmi si occupano di modificare l'impaginazione del testo, cambiandone la larghezza o aggiungendo delle intestazioni.
fmt [<opzioni>]
[<file>... ]
Formatta il testo contenuto nei file forniti come argomento,
eliminando e aggiungendo simboli di newline
(
-
w <ampiezza> | -
-
width=<ampiezza>
Determina esplicitamente l'ampiezza massima del testo.
Vedere info fmt oppure fmt(1).
pr [<opzioni>]
[<file>... ]
Emette attraverso lo standard output il contenuto dei file forniti come argomento, formattati opportunamente per la stampa. Se non viene indicato diversamente attraverso le opzioni:
Nel caso si utilizzino più colonne:
+<pagina-iniziale>[:<pagina-finale>]
Stampa l'intervallo di pagine indicato. Se manca la pagina finale, si intende che l'ultima.
-
<numero-colonne>
Produce un risultato suddiviso sul numero di colonne indicato. L'ampiezza delle colonne viene calcolata automaticamente.
-
c
Stampa i caratteri di controllo utilizzando la notazione: ^A, ^B, ... I simboli comunque non stampabili vengono rappresentati in ottale: \ooo.
-
d
Stampa raddoppiando la spaziatura tra le righe (spaziatura doppia).
-
l <lunghezza-pagina>
Definisce la dimensione della pagina espressa in righe. Di solito la pagina è lunga 66 righe.
-
o <margine-sinistro>
Definisce il margine sinistro espresso in caratteri.
Vedere info pr oppure pr(1).
fold [<opzioni>]
[<file>... ]
Formatta il testo contenuto nei file forniti come argomento,
suddividendo le linee troppo lunghe inserendo un simbolo di
newline (
-
b | -
-
bytes
Conta i caratteri
-
s | -
-
spaces
Cerca di interrompere le righe subito dopo uno di spazio vuoto, in modo da evitare di spezzare delle parole.
-
w <larghezza> | -
-
width=<larghezza>
Definisce la larghezza massima della colonna di testo finale.
column [<opzioni>]
[<file>... ]
Incolonna. Trasforma l'input rappresentato dai file indicati come argomento in modo da ottenere più colonne. Il risultato viene emesso attraverso lo standard output.
-
c <colonne>
Indica la dimensione orizzontale in caratteri del'output che si vuole ottenere.
-
x
Di norma, ogni colonne viene riempita completamente prima di passare alla successiva. Con questa opzione, i dati all'interno delle colonne vengono disposti in sequenza orizzontale.
colrm [<colonna-iniziale>]
[<colonna-finale>]
Elimina un intervallo di colonne da un file di testo. Le colonne sono espresse in caratteri. L'input è ottenuto dallo standard input e l'output viene emesso attraverso lo standard output. Se vengono omessi gli attributi, non viene eliminato alcunché. Se manca l'indicazione della colonna finale, l'eliminazione avviene a partire dalla colonna iniziale indicata fino alla fine della riga.
$
colrm 1 10 < documento.txt > tagliato.txt
Vengono eliminati i primi dieci caratteri di ogni riga del file documento.txt e il risultato viene emesso in tagliato.txt.
$
colrm 81 < documento > normale.txt
Le righe che superano gli 80 caratteri vengono tagliate.
Un tipo particolare di file di testo è quello che contiene
codici speciali di spostamento allo scopo di ottenere un
aspetto particolare quando questo viene stampato.
Il codice più usato in questo senso è
Per esempio, per ottenere la parola ``GRA'' in grassetto,
si utilizza una sequenza del tipo:
``G
col [<opzioni>]
Alcuni tipi di file di testo possono contenere codici di spostamento in avanti o indietro. Alcuni di questi codici possono risultare inadatti alle unità per la visualizzazione e/o la stampa, oppure possono essere disposti in modo disordinato.
col emette attraverso lo standard output una trasformazione dello standard input, in modo che questo contenga solo codici per l'avanzamento di riga in avanti.
-
b
Vengono eliminati anche i caratteri di
backspace (
-
f
I caratteri di mezzo line feed (avanzamento di mezza riga) vengono permessi e non vengono quindi eliminati.
-
x
Le tabulazioni vengono sostituite con spazi.
colcrt [<opzioni>]
[<file>... ]
Emette attraverso lo standard output una trasformazione dei file indicati come argomento, in modo da permettere la visualizzazione o la stampa di testi contenenti codici di spostamento di mezza riga. In pratica i caratteri che dovrebbero apparire stampati in una mezza riga successiva, vengono spostati nella riga (intera) successiva. Il suo funzionamento è simile a quello del programma col, ma è particolarmente orientato alla emissione di un output adatto allo schermo di un terminale.
-
Vengono eliminate tutte le sottolineature.
-
2
Stampa tutte le mezze righe, raddoppiando in pratica tutto l'output.
Alcuni programmi si occupano di estrarre dall'input solo alcune porzioni o di suddividere l'input in parti più piccole.
head [<opzioni>]
[<file>... ]
Emette attraverso lo standard output la prima parte (le prime 10 righe se non viene specificato diversamente nelle opzioni) dei file forniti come argomento.
-
b <dimensione> | -
-
bytes=<dimensione>
Emette la quantità di byte indicata dalla dimensione. Alla fine del numero può essere aggiunta una lettera che si comporta come moltiplicatore:
-
n <dimensione> | -
-
lines=<dimensione>
Emette la quantità di righe indicata dalla dimensione.
tail [<opzioni>]
[<file>... ]
Emette attraverso lo standard output la parte finale (le ultime 10 righe se non viene specificato diversamente nelle opzioni) dei file forniti come argomento.
-
b <dimensione> | -
-
bytes=<dimensione>
Emette la quantità di byte indicata dalla dimensione. Alla fine del numero può essere aggiunta una lettera che si comporta come moltiplicatore:
-
n <dimensione> | -
-
lines=<dimensione>
Emette la quantità di righe indicata dalla dimensione.
split [<opzioni>]
[<file> [<prefisso>]]
split suddivide il contenuto del file fornito come argomento in porzioni ordinate, di una lunghezza massima definita (di solito 1000 righe). I file che vengono generati hanno il prefisso indicato nell'argomento (oppure x se non viene specificato), seguito da una coppia di lettere che cambiano in modo ordinato: aa, ab, ac,... in modo che i nomi ottenuti possano essere ordinati nello stesso ordine con cui il file originale è stato suddiviso.
-
l <righe> | -
-
lines=<righe>
Definisce il numero di righe dei file di destinazione.
-
b <dimensione> | -
-
bytes=<dimensione>
Definisce la dimensione in byte dei file di destinazione. Alla fine del numero può essere aggiunta una lettera che si comporta come moltiplicatore:
-
C <dimensione> | -
-
line-
bytes=<dimensione>
Definisce la dimensione massima in byte dei file di
destinazione, intendendo però che questi file
contengano righe intere.
Si possono usare gli stessi moltiplicatori utilizzabili
nell'opzione -
b.
csplit [<opzioni>]
<file> <modello>...
Crea da nessuno a diversi file contenenti porzioni del file fornito come argomento. Il contenuto del risultato dipende dai modelli forniti come argomento.
Vedere info csplit oppure csplit(1).
Alcuni programmi si occupano di calcolare somme di vario genere in base al contenuto dell'input. Può trattarsi del conteggio di determinati elementi o di checksum.
wc [<opzioni>]
[<file>... ]
Emette attraverso lo standard output la statistica sul conteggio dei caratteri newline (in pratica il numero delle righe), delle parole e dei byte. Se attraverso le opzioni vengono specificati uno o due tipi di conteggio, quelli non espressamente indicati, non vengono emessi.
-
c | -
-
bytes
Emette la dimensione in byte.
-
w | -
-
words
Emette il totale delle parole.
-
l | -
-
lines
Emette il numero di righe (precisamente il numero di caratteri newline).
sum [<opzioni>]
[<file>... ]
sum calcola un checksum a 16 bit per ogni file fornito negli argomenti. Emette attraverso lo standard output il valore ottenuto insieme alla dimensione (arrotondata) in blocchi. Il valore predefinito della dimensione dei blocchi è di 1024 byte.
Questo programma viene considerato obsoleto e al suo posto si preferisce utilizzare cksum
-
r
Utilizza l'algoritmo predefinito (compatibile con BSD).
-
s | -
-
sysv
Utilizza l'algoritmo compatibile con System V. In tal caso, i blocchi hanno una dimensione di 512 byte.
cksum [<opzioni>]
[<file>... ]
cksum calcola un checksum CRC (Cyclic Redundancy Check) per ogni file fornito negli argomenti.
Non utilizza opzioni, tranne quelle standard.
md5sum [<opzioni>]
[<file>... ]
md5sum calcola un checksum MD5 (Message Digest) a 128 bit per ogni file fornito negli argomenti.
Vedere info md5sum oppure md5sum(1).
Alcuni programmi si occupano di riordinare file o di utilizzare file ordinati. L'ordinamento, la fusione, l'eliminazione degli elementi doppi e la ricerca binaria, rientrano in questo concetto.
sort [<opzioni>] [<file>... ]
sort permette di ordinare o fondere insieme (merge) il contenuto dei file.
Sono disponibili tre modalità di funzionamento:
Il risultato dell'ordinamento o della fusione, viene emesso attraverso lo standard output a meno che non sia stato specificato diversamente attraverso le opzioni.
-
c
Controlla che i file indicati siano già ordinati; se non lo sono, viene emessa una segnalazione di errore e il programma termina restituendo il valore 1.
-
m
Fonde insieme i file indicati che dovevano essere già ordinati in precedenza. Nel caso non lo fossero, si può sempre usare la modalità di ordinamento normale. L'utilizzo di questa opzione permette di risparmiare tempo quando la situazione la permette.
-
b
Ignora gli spazi bianchi iniziali.
-
d
Durante l'ordinamento ignora tutti i caratteri che non siano lettere, numeri e spazi.
-
f
Non distingue tra maiuscole e minuscole.
-
i
Ignora i caratteri speciali al di fuori del set ASCII puro (da 0x30 a 0x7E compresi).
-
n
Esegue una comparazione, o un ordinamento, numerico, tenendo conto anche del segno meno e del punto decimale.
-
r
Inverte l'ordine della comparazione o dell'ordinamento.
-
o <file-generato>
Invece di utilizzare lo standard output per emettere il risultato dell'ordinamento o della fusione, utilizza il file indicato come argomento di questa opzione.
-
t <carattere-di-separatore>
Permette di definire il carattere usato come separatore tra i campi che compongono le varie righe (record).
-
u
Il risultato dell'utilizzo di questa opzione dipende dalla modalità di funzionamento di sort. Se è attiva la modalità di ordinamento o di fusione, fa sì che, in caso di chiavi duplicate, venga emesso solo il primo di questi record. Se è attiva la modalità di controllo, fa sì che venga segnalato un errore in presenza di chiavi duplicate.
-
k +<posizione-iniziale> [,<posizione-finale>]
Specifica la chiave di ordinamento o di fusione secondo una sintassi particolare.
[...]
Vedere info sort oppure sort(1).
unique [<opzioni>] [<file-in-ingresso> [<file-in-uscita>]]
runique filtra il contenuto dei file ed emette solo le righe uniche. Il file fornito come input deve essere ordinato.
Vedere info unique oppure unique(1).
comm [<opzioni>]
[<file1>] <file2>
Confronta due file ordinati e emette nello standard output l'indicazione delle righe uniche nel primo e nel secondo file, oltre alle righe che i due file hanno in comune. Se non vengono specificate delle opzioni, viene emesso un risultato su tre colonne: la prima contiene le righe uniche del primo file, la seconda le righe uniche del secondo file, la terza le righe in comune.
-
1
Sopprime la prima colonna.
-
2
Sopprime la seconda colonna.
-
3
Sopprime la terza colonna.
look [<opzioni>]
<stringa> [<file>]
Esegue una ricerca binaria all'interno di un file ordinato a partire dalla prima colonna. Viene emessa la riga del file che inizia con la stringa indicata.
Vedere look(1).
Alcuni programmi si occupano di elaborare porzioni di file a livello di righe (o dei record).
Quando le righe di un file contengono informazioni strutturate in qualche modo, gli elementi di queste sono chiamati campi, e al posto del termine riga, si preferisce utilizzare la parola record che esprime più precisamente il ruolo di questa: contenere una registrazione.
I campi di un record possono avere una dimensione fissa, oppure variabile. Nel primo caso anche i record hanno una dimensione fissa e la suddivisione in campi avviene in base alla posizione; nel secondo caso i record hanno una dimensione variabile e i campi vengono riconosciuti in base ad un separatore che di solito deve essere definito.
cut [<opzioni>]
[<file>... ]
Emette attraverso lo standard output porzioni del contenuto di ogni riga dei file indicati come argomento. Il modo con cui ciò avviene dipende dagli argomenti, attraverso i quali possono essere definite delle liste di valori o di intervalli. Il primo elemento corrisponde al numero 1.
-
b <lista-di-byte> | -
-
bytes=<lista-di-byte>
Definisce gli intervalli da estrarre espressi in byte.
-
f <lista-di-campi> | -
-
fields=<lista-di-campi>
Definisce gli intervalli da estrarre espressi in campi. I campi sono distinti in base a un certo carattere usato come delimitatore. Quello predefinito è il carattere di tabulazione.
-
d <delimitatore> | -
-
delimiter=<delimitatore>
Definisce un delimitatore alternativo al carattere di tabulazione.
$
cut -
b 1-
10 pippo
Emette i primi dieci byte di ogni riga del file pippo.
$
cut -
b 1-
10,21 pippo
Emette per ogni riga del file pippo solo i primi dieci byte seguiti dal 21-esimo byte.
$
cut -
m ":" -
f 1,5 /etc/passwd
Emette il primo e il quinto campo del file /etc/passwd. Per leggere correttamente il file, viene anche definito il tipo di separatore (:). In pratica, viene visualizzato il nominativo e il nome completo degli utenti.
paste [<opzioni>]
[<file>... ]
Emette attraverso lo standard output l'unione, riga per riga, dei file indicati come argomento. Le righe dei file vengono prese in ordine sequenziale e unite separandole con una tabulazione. Al termine delle nuove righe ottenute, viene aggiunto il carattere newline.
-
s | -
-
serial
In questo caso viene utilizzato un solo file alla volta e tutte le sue righe vengono unite in un'unica riga.
-
d <elenco-delimitatori> | -
-
delimiters <elenco-delimitatori>
Viene utilizzato l'elenco di delimitatori fornito invece di utilizzare la tabulazione per separare le righe riunite. Quando l'elenco di delimitatori viene esaurito, si ricomincia ad usare il primo, e così di seguito.
join [<opzioni>]
<file1> <file2>
join unisce i due file forniti come argomento, riga per riga. L'abbinamento delle righe avviene in base a delle chiavi di ordinamento. I due file devono essere già ordinati in base alle chiavi che si vogliono prendere in considerazione per la fusione. Il file emesso attraverso lo standard output contiene quindi delle righe risultate dall'unione di quelle dei file in ingresso e questa unione viene fatta in corrispondenza di chiavi uguali.
Vedere info join oppure join(1).
Alcuni programmi si occupano di elaborare i file a livello di byte. Può trattarsi di trasformazioni di singoli caratteri o di spazi in tabulazioni e viceversa.
tr [<opzioni>]
<stringa1> [<stringa2>]
Copia lo standard input nello standard output trasformandolo in vari modi possibili. Questo comando può essere utile per sostituire o eliminare determinati caratteri da un testo (compresi alcuni caratteri di controllo), oltre che compattare delle sequenze ripetitive di caratteri.
Vedere info tr oppure tr(1).
expand [<opzioni>]
[<file>... ]
Emette sullo standard output una trasformazione dei file forniti come argomento, in cui i simboli di tabulazione sono trasformati in spazi veri e propri. Se non viene specificato diversamente attraverso le opzioni, gli stop di tabulazione si intendono ogni otto caratteri.
-
t <tab1>[,<tab2>...] | -
-
tabs=<tab1>[,<tab2>...]
Premette di specificare una tabulazione diversa da quella predefinita (ogni 8 colonne). Se viene specificato solo un numero, si intende una tabulazione ogni n colonne, altrimenti, si intende una sequenza di stop di tabulazione, in cui la prima colonna corrisponde al numero zero. Una volta esaurito l'elenco, gli stop di tabulazione successivi, vengono sostituiti con un singolo spazio.
-
i | -
-
initial
Converte solo gli stop di tabulazione iniziali, cioè quelli che precedono caratteri diversi da spazio, o che precedono altre tabulazioni.
unexpand [<opzioni>]
[<file>... ]
Emette attraverso lo standard output una trasformazione dei file forniti come argomento, in cui gli spazi sono trasformati in tabulazioni per quanto possibile. Se non viene specificato diversamente attraverso le opzioni, gli stop di tabulazione si intendono ogni otto caratteri. Normalmente, il programma trasforma solo gli spazi iniziali.
-
t <tab1>[,<tab2>...] | -
-
tabs=<tab1>[,<tab2>...]
Premette di specificare una tabulazione diversa da quella predefinita (ogni 8 colonne). Se viene specificato solo un numero, si intende una tabulazione ogni n colonne, altrimenti, si intende una sequenza di stop di tabulazione, in cui la prima colonna corrisponde al numero zero. Una volta esaurito l'elenco, non vengono fatte altre trasformazioni.
-
a | -
-
all
Non si limita a trasformare solo gli spazi iniziali.
1997.10.26 - Scritto da Daniele Giacomini daniele@calion.com (vedi copyright: Appunti Linux).