# Less (Unix)

less è un comando dei sistemi operativi Unix e Unix-like che mostra il contenuto di uno o più file di testo (o dello standard input) su di un terminale testuale, visualizzandolo una pagina per volta, permettendo di scorrerlo in avanti e all'indietro e di effettuare ricerche tramite espressioni regolari.

## Storia

less nasce nel 1983 (e viene distribuito per la prima volta nel 1985) per opera di Mark Nudelman come evoluzione delle vecchie implementazioni del comando more presente nei primi sistemi BSD.
In particolare, less riprende gran parte delle funzionalità di more, permettendo inoltre di:
* scorrere il testo all'indietro anche in caso di dati provenienti dallo standard input;
* scorrere il testo fino ad una posizione predeterminata;
* effettuare ricerche sia in avanti che all'indietro, evidenziando visivamente le occorrenze trovate.
Nel corso degli anni sono stati realizzati port anche per sistemi non Unix, tra cui MS-DOS, OS/2, Microsoft Windows e z/OS., e less ha acquisito ulteriori funzionalità, permettendo di:
* scorrere il testo orizzontalmente;
* tenere sotto controllo le aggiunte ad un file, in maniera analoga a quanto avviene con il comando tail -f;
* essere eseguito in maniera sicura (senza ad esempio possibilità di avviare programmi esterni) impostando a 1 la variabile d'ambiente LESSSECURE;
* preprocessare i file da visualizzare (ad esempio decomprimendo automaticamente file compressi) tramite programmi esterni specificati dalla variabile d'ambiente LESSOPEN;
* filtrare il testo mostrando solo le linee che soddisfano un'espressione regolare.

## Sintassi

La sintassi generale di less è la seguente:
I parametri facoltativi file indicano i nomi dei file di testo da visualizzare. Se non sono specificati, viene mostrato lo standard input.
Il doppio trattino -- (facoltativo) indica che i parametri successivi non sono da considerarsi opzioni.

## Opzioni

Le opzioni sono in parte quelle previste dallo standard POSIX per il comando more. Tra esse vi sono:

### -c

    Nel presentare le pagine, evita di far scorrere lo schermo.

### -e

    Esce da less quando si raggiunge per due volte consecutive la fine del file.

### -i

    Effettua ricerche senza differenziare tra lettere maiuscole e minuscole.

### -s

    Raggruppa le linee vuote, mostrando una sola linea vuota per ogni gruppo di linee vuote consecutive.

### -t etichetta

    Visualizza il file che contiene l'etichetta specificata. A tal fine è necessario che sia disponibile anche un file che elenchi le etichette ed i file che le contengono (ad esempio generato dal comando ctags).

### -u

    Disabilita la gestione particolare di alcuni caratteri di controllo, tipicamente col risultato che il testo che normalmente apparirebbe sottolineato o evidenziato viene visualizzato come testo normale.

### Comandi

Dopo aver visualizzato una pagina di testo, less rimane normalmente in attesa di comandi da parte dell'utente. Alcuni di essi possono essere preceduti da un numero che ne influenza il comportamento.
I comandi sono per la maggior parte quelli previsti dallo standard POSIX per il comando more. Alcuni dei comandi più comuni sono:

#### h

    Mostra una pagina di aiuto dei comandi (da help, aiuto)

#### q

    Esce da less (da quit, termina).

#### [numero_linee]spazio

    Avanza di una pagina, o avanza del numero di linee indicato da numero_linee se specificato

#### [numero_pagine]f

    Avanza di una pagina o del numero di pagine indicato da numero_pagine se specificato (da forward, avanti).

#### [numero_pagine]b

    Torna indietro di una pagina o del numero di pagine indicato da numero_pagine se specificato (da backwards, indietro).

#### [num]g

    Va all'inizio del testo (o al numero di linea num specificato).

#### [num]G

    Va alla fine del testo (o al numero di linea num specificato).

#### [num]/regexp

    Ricerca in avanti la prossima (o la num-esima) occorrenza dell'espressione regolare regexp.

#### [num]?regexp

    Ricerca all'indietro la precedente (o la num-esima) occorrenza dell'espressione regolare regexp.

#### &regexp

    Visualizza solo le linee che soddisfano l'espressione regolare regexp.

#### [num]n

    Passa alla prossima (o la num-esima) occorrenza dell'ultima ricerca effettuata. La direzione dipende dalla direzione dell'ultima ricerca effettuata.

#### [num]N

    Passa alla precedente (o la num-esima) occorrenza dell'ultima ricerca effettuata. La direzione è opposta a quella della dell'ultima ricerca effettuata.

#### !comando

    Avvia il comando esterno specificato (ad esempio !ls -l /tmp)

#### v

    Avvia un editor di testo esterno (tipicamente vi) per modificare il file.

#### F

    Va alla fine del testo e continua a leggere in attesa di dati aggiuntivi (in maniera analoga a quanto avviene per il comando tail -f).

## Esempi

Mostra il contenuto del file /var/adm/syslog:
Esegue una ricerca tramite il comando find e visualizza il risultato una pagina per volta (tramite una pipeline software):