<Precedenti | Contenuti | Succ.>
fmt – Un semplice formattatore di testo
. FMT Il programma comprime anche il testo, e molto altro ancora. Accetta file o input standard ed esegue la formattazione dei paragrafi sul flusso di testo. In pratica, riempie e unisce le righe di testo preservando le righe vuote e i rientri.
Per dimostrarlo, avremo bisogno di un po' di testo. Prendiamone un po' da FMT pagina informativa:
`fmt' legge dagli argomenti FILE specificati (o dall'input standard se non ne viene fornito nessuno) e scrive sull'output standard.
Per impostazione predefinita, le righe vuote, gli spazi tra le parole e i rientri sono
`fmt' legge dagli argomenti FILE specificati (o dall'input standard se non ne viene fornito nessuno) e scrive sull'output standard.
Per impostazione predefinita, le righe vuote, gli spazi tra le parole e i rientri sono
conservate nell'output; le righe di input successive con indentazioni diverse non vengono unite; le tabulazioni vengono espanse in input e introdotte in output.
`fmt' preferisce interrompere le righe alla fine di una frase e cerca di evitare interruzioni di riga dopo la prima parola di una frase o prima dell'ultima parola di una frase. Un'interruzione di frase è definita come la fine di un paragrafo o una parola che termina con `.?!', seguita da due spazi o dalla fine della riga, ignorando eventuali parentesi o virgolette intermedie. Come TeX, `fmt' legge interi "paragrafi" prima di scegliere le interruzioni di riga; l'algoritmo è una variante di quello proposto da Donald E. Knuth e Michael F. Plass in "Breaking Paragraphs Into Lines",
`Software--Pratica ed esperienza' 11, 11 (novembre 1981), 1119-1184.
conservate nell'output; le righe di input successive con indentazioni diverse non vengono unite; le tabulazioni vengono espanse in input e introdotte in output.
`fmt' preferisce interrompere le righe alla fine di una frase e cerca di evitare interruzioni di riga dopo la prima parola di una frase o prima dell'ultima parola di una frase. Un'interruzione di frase è definita come la fine di un paragrafo o una parola che termina con `.?!', seguita da due spazi o dalla fine della riga, ignorando eventuali parentesi o virgolette intermedie. Come TeX, `fmt' legge interi "paragrafi" prima di scegliere le interruzioni di riga; l'algoritmo è una variante di quello proposto da Donald E. Knuth e Michael F. Plass in "Breaking Paragraphs Into Lines",
`Software--Pratica ed esperienza' 11, 11 (novembre 1981), 1119-1184.
Copiamo questo testo nel nostro editor di testo e salviamo il file come fmt-info.txtOra, supponiamo di voler riformattare questo testo per adattarlo a una colonna di cinquanta caratteri. Potremmo farlo elaborando il file con FMT e la -w opzione:
[io@linuxbox~]$ fmt -w 50 fmt-info.txt | testa
`fmt' legge dagli argomenti FILE specificati (o input standard se
non ne viene specificato nessuno) e scrive sull'output standard.
Per impostazione predefinita, le righe vuote, gli spazi tra le parole e i rientri sono
conservate nell'output; le righe di input successive con indentazioni diverse non vengono unite; le tabulazioni vengono espanse in input e introdotte in output.
[io@linuxbox~]$ fmt -w 50 fmt-info.txt | testa
`fmt' legge dagli argomenti FILE specificati (o input standard se
non ne viene specificato nessuno) e scrive sull'output standard.
Per impostazione predefinita, le righe vuote, gli spazi tra le parole e i rientri sono
conservate nell'output; le righe di input successive con indentazioni diverse non vengono unite; le tabulazioni vengono espanse in input e introdotte in output.
Beh, questo è un risultato imbarazzante. Forse dovremmo leggere questo testo, perché spiega cosa sta succedendo:
Per impostazione predefinita, le righe vuote, gli spazi tra le parole e i rientri vengono mantenuti nell'output; le righe di input successive con rientri diversi non vengono unite; le tabulazioni vengono espanse in input e inserite in output.
Così, FMT preserva il rientro della prima riga. Fortunatamente, FMT fornisce un'opzione per correggere questo:
[io@linuxbox~]$ fmt -cw 50 fmt-info.txt
`fmt' legge dagli argomenti FILE specificati (o dall'input standard se non ne viene fornito nessuno) e scrive sull'output standard.
[io@linuxbox~]$ fmt -cw 50 fmt-info.txt
`fmt' legge dagli argomenti FILE specificati (o dall'input standard se non ne viene fornito nessuno) e scrive sull'output standard.
Per impostazione predefinita, le righe vuote, gli spazi tra le parole e i rientri vengono mantenuti nell'output; le righe di input successive con rientri diversi non vengono unite; le tabulazioni vengono espanse in input e inserite in output.
`fmt' preferisce interrompere le righe alla fine di una frase e cerca di evitare interruzioni di riga dopo la prima parola di una frase o prima della
ultima parola di una frase. Un'interruzione di frase è definita come la fine di un paragrafo o una parola che termina con `.?!', seguita da due spazi o dalla fine della riga, ignorando qualsiasi
parentesi o virgolette intermedie. Come TeX,
`fmt' legge interi "paragrafi" prima di scegliere le interruzioni di riga; l'algoritmo è una variante di
quello dato da Donald E. Knuth e Michael F. Plass in "Breaking Paragraphs Into Lines",
`Software--Pratica ed esperienza' 11, 11
(novembre 1981), 1119-1184.
Per impostazione predefinita, le righe vuote, gli spazi tra le parole e i rientri vengono mantenuti nell'output; le righe di input successive con rientri diversi non vengono unite; le tabulazioni vengono espanse in input e inserite in output.
`fmt' preferisce interrompere le righe alla fine di una frase e cerca di evitare interruzioni di riga dopo la prima parola di una frase o prima della
ultima parola di una frase. Un'interruzione di frase è definita come la fine di un paragrafo o una parola che termina con `.?!', seguita da due spazi o dalla fine della riga, ignorando qualsiasi
parentesi o virgolette intermedie. Come TeX,
`fmt' legge interi "paragrafi" prima di scegliere le interruzioni di riga; l'algoritmo è una variante di
quello dato da Donald E. Knuth e Michael F. Plass in "Breaking Paragraphs Into Lines",
`Software--Pratica ed esperienza' 11, 11
(novembre 1981), 1119-1184.
Molto meglio. Aggiungendo il -c opzione, ora abbiamo il risultato desiderato.
fmt ha alcune opzioni interessanti:
Tabella 21-3: Opzioni fmt
Opzione Descrizione
Opzione Descrizione
-c Operare in margine della corona modalità. Questa modalità mantiene il rientro delle prime due righe di un paragrafo. Le righe successive vengono allineate con il rientro della seconda riga.
-p stringa Formattare solo le righe che iniziano con il prefisso stringaDopo la formattazione, il contenuto di stringa sono prefissati a ogni riga riformattata. Questa opzione può essere utilizzata per formattare il testo nei commenti del codice sorgente. Ad esempio, qualsiasi linguaggio di programmazione o file di configurazione che utilizza il carattere "#" per delimitare un commento potrebbe essere formattato specificando -P '# ' in modo che solo i commenti vengano formattati. Vedi l'esempio qui sotto.
-s Modalità solo di divisione. In questa modalità, le righe verranno divise solo per adattarsi alla larghezza di colonna specificata. Le righe corte non verranno unite per riempire le righe. Questa modalità è utile quando si formatta del testo, ad esempio il codice, in cui l'unione non è desiderata.
-u Esegui una spaziatura uniforme. Questo applicherà la tradizionale "macchina da scrivere-
formattazione "stile" al testo. Ciò significa un singolo spazio tra le parole e due spazi tra le frasi. Questa modalità è utile per rimuovere la "giustificazione", ovvero il testo che è stato riempito con spazi per forzare l'allineamento sia sul margine sinistro che su quello destro.
-w larghezza Formatta il testo per adattarlo a una colonna larghezza caratteri. Il valore predefinito è 75 caratteri. Nota: FMT in realtà formatta le righe leggermente più corte della larghezza specificata per consentire il bilanciamento delle righe.
. -p L'opzione è particolarmente interessante. Con essa, possiamo formattare porzioni selezionate di un file, a condizione che le righe da formattare inizino tutte con la stessa sequenza di caratteri. Molti linguaggi di programmazione usano il simbolo cancelletto (#) per indicare l'inizio di un commento e quindi possono essere formattati utilizzando questa opzione. Creiamo un file che simula un programma che utilizza commenti:
[io@linuxbox~]$ gatto > fmt-code.txt
# Questo file contiene codice con commenti.
# Questa riga è un commento.
# Seguito da un'altra riga di commento.
# E un altro.
Questa, d'altra parte, è una riga di codice. E un'altra riga di codice.
E un altro.
[io@linuxbox~]$ gatto > fmt-code.txt
# Questo file contiene codice con commenti.
# Questa riga è un commento.
# Seguito da un'altra riga di commento.
# E un altro.
Questa, d'altra parte, è una riga di codice. E un'altra riga di codice.
E un altro.
Il nostro file di esempio contiene commenti che iniziano con la stringa "#" (un # seguito da uno spazio) e righe di "codice" che non lo fanno. Ora, usando FMT, possiamo formattare i commenti e lasciare il codice intatto:
[io@linuxbox~]$ fmt -w 50 -p '# ' fmt-code.txt
# Questo file contiene codice con commenti.
# Questa riga è un commento. Seguita da un'altra
# riga di commento. E un'altra.
Questa, d'altra parte, è una riga di codice. E un'altra riga di codice.
E un altro.
[io@linuxbox~]$ fmt -w 50 -p '# ' fmt-code.txt
# Questo file contiene codice con commenti.
# Questa riga è un commento. Seguita da un'altra
# riga di commento. E un'altra.
Questa, d'altra parte, è una riga di codice. E un'altra riga di codice.
E un altro.
Si noti che le righe di commento adiacenti vengono unite, mentre le righe vuote e quelle che non iniziano con il prefisso specificato vengono conservate.