2009-10-23 14 views

Respuesta

19

Tenga en cuenta que cut acepta un nombre de archivo como argumento.

Esto parece funcionar para mí:

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

Para las pruebas, que añaden un margen derecho:

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

Cuando cambia el tamaño de mi terminal, el truncamiento se actualiza para que coincida.

+0

Cuando ejecuto el script 'watch./Colscript', veo 80 mostrados. Cuando cambio el ancho arrastrando el borde de la ventana (estoy usando PuTTY) el número cambia para coincidir. ¿Que ves? –

+0

No veo nada, pero descubrí por qué: diferentes versiones de bash. reloj ./colscript funciona en bash 4.0 (mi computadora), pero no en bash 3.0 (una computadora remota). ./colscript no funciona en ninguna de las dos versiones. – Alexandru

+0

'echo $ BASH_VERSION' me da" 3.2.48 (1) -release "La razón por la que ejecutar'./Colscript' desde la línea de comando hace eco de una línea en blanco es que '$ COLUMNS' solo se llena para las shells interactivas. Puedes intentar agregar '-i' al final de la primera línea de'./Colscript' para que tengas '#!/Bin/bash -i' –

34

Tal vez está buscando para fmt:

fmt file 

Esto cambia el formato bastante agresiva su texto, por lo que puede hacer más de lo que desea.

Alternativamente, el comando cut puede cortar texto a un ancho de columna específica, descartando el texto más allá del margen derecho:

cat file | cut -c1-80 

Otra opción útil es el comando less -S, que muestra un archivo en una ventana de pantalla completa con izquierda/derecha desplazamiento de las líneas largas:

less -S file 
+0

De hecho, se hace más que quiero: concatena líneas. – Alexandru

+0

En realidad, estoy viendo el contenido del archivo usando watch "cat file" así que no puedo usar menos. cat archivo | corte -c1-80 hizo el truco, parcialmente. ¿Hay alguna forma de ajustar el corte al tamaño de la pantalla? – Alexandru

+2

Puede tener la variable de entorno '$ COLUMNS' definida: intente ' cortar -c1- $ archivo COLUMNS' – mob

5

como otros han dicho, la respuesta es cut -c ..., pero para añadir algo dinámico a ella, prefiero esto:

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

2

para alternar largo de ajuste de línea en menos. Predeterminado es para envolver.

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

También puedes llamar' less' con '-S' como opción : 'less -s file' o incluirlo en su entorno:' export LESS = "- S" '(más otras opciones). En cualquier caso, aún puede usar el botón de alternar una vez que se está ejecutando, si lo desea. –

1

El uso de cut no toma en cuenta que las pestañas se consideran un solo carácter \t pero se imprime como 8 espacios en blanco. Por lo tanto, un archivo con pestañas se cortará en diferentes columnas percibidas.

less -S trunca el texto de forma óptima, también en presencia de pestañas, pero AFAIK no se puede utilizar para imprimir de forma no interactiva el archivo "picado".

una solución de trabajo es convertir las lengüetas en espacios a través de expand y luego cut la salida: expand < file | cut -c -$(tput cols)

+0

'expand' es una gran ayuda; gracias, solo estaba luchando con este problema (con pestañas). ¡Me alegro de haber bajado hasta el fondo! – Lambart

Cuestiones relacionadas