2009-10-23 11 views

risposta

19

Nota che cut accetta un nome di file come argomento.

Questo sembra funzionare per me:

watch 'bash -c "cut -c -$COLUMNS file"' 

Per il test, ho aggiunto un margine destro:

watch 'bash -c "cut -c -$(($COLUMNS-10)) file"' 

Quando ho ridimensionato mio terminale, il troncamento è stato aggiornato in modo che corrisponda.

+0

Quando eseguo il tuo script 'watch./collscript', vedo 80 visualizzati. Quando cambio la larghezza trascinando il bordo della finestra (sto usando PuTTY) il numero cambia per corrispondere. Cosa vedi? –

+0

Non vedo nulla, ma ho capito perché: diverse versioni bash. orologio ./colscript funziona su bash 4.0 (il mio computer), ma non su bash 3.0 (un computer remoto). ./colscript non funziona su nessuna delle due versioni. – Alexandru

+0

'echo $ BASH_VERSION' mi dà" 3.2.48 (1) -release "La ragione per cui eseguire'./Colscript' dalla riga di comando fa eco a una riga vuota è che '$ COLUMNS' è popolato solo per le shell interattive. Puoi provare '-i' alla fine della prima riga di'./Colscript' in modo da avere '#!/Bin/bash -i' –

34

potrebbe essere alla ricerca per fmt:

fmt file 

Questo riformatta abbastanza aggressivo il testo, in modo che può fare più di quello che si vuole.

Alternativamente, il comando cut può tagliare testo per una determinata larghezza di colonna, scartando testo oltre il margine destro:

cat file | cut -c1-80 

Un'altra opzione utile è il comando less -S, che visualizza un file in una finestra a schermo intero con sinistra/destra scorrimento per le linee lunghe:

less -S file 
+0

infatti, fa più di voglio: concatena linee. – Alexandru

+0

In realtà, sto guardando il contenuto del file usando watch "cat file" quindi non posso usare meno. cat file | cut -c1-80 ha fatto il trucco, parzialmente. Qualche modo per adattare il taglio alle dimensioni dello schermo? – Alexandru

+2

Puoi avere la variabile di ambiente '$ COLUMNS' definita: prova ' cut -c1- $ COLUMNS file ' – mob

5

come già detto da altri, la risposta è cut -c ..., ma per aggiungere un po 'di dinamica ad esso, preferisco questo:

cat file.txt |cut -c -$(tput cols)

2

per alternare lungo-linea-wrap in meno. L'impostazione predefinita è di avvolgere.

- `less file` 
- in file type `"-S"` to toggle to truncate on line width 
- to toggle back `"-S"` again. 
+0

Puoi anche chiamare' less' con '-S' come opzione : 'less -S file' o includilo nel tuo ambiente:' export LESS = "- S" '(più altre opzioni). In entrambi i casi, puoi ancora utilizzare l'interruttore una volta eseguito, se lo desideri. –

1

L'uso di cut non tiene conto del fatto che le linguette sono considerati un singolo carattere \t ma sono stampati come 8 spazi vuoti. Pertanto un file con schede verrà tagliato in colonne diverse percepite.

less -S tronca in modo ottimale il testo, anche in presenza di schede, ma AFAIK non può essere utilizzato per stampare in modo non interattivo il file "tritato".

Una soluzione di lavoro è di convertire linguette in spazi attraverso expand e poi cut l'output: expand < file | cut -c -$(tput cols)

+0

'expand' è di grande aiuto; grazie, stavo solo lottando con questo problema (con le schede). Sono contento di averlo fatto scorrere verso il basso! – Lambart

Problemi correlati