¿Cómo puedo ajustar el texto en un determinado tamaño de columna?

142

Sé que puedo usar algo como cat test.txt | pr -w 80ajustar líneas a 80 caracteres de ancho, pero eso pone mucho espacio en la parte superior e inferior de las líneas impresas y no funciona bien en algunos sistemas

¿Cuál es la mejor manera de forzar que un archivo de texto con líneas largas se ajuste a un ancho determinado?

Puntos de bonificación si puede evitar que rompa palabras.

cwd
fuente

Respuestas:

177

Estás buscando

fold -w 80 -s text.txt
  • -w indica el ancho del texto, donde 80 es estándar.
  • -s le dice a romper en espacios, y no en palabras.

Esta es la forma estándar , pero hay otros sistemas que necesitan "-c" en lugar de "-w".

Rainer Bendig
fuente
También funciona en OS X, pero el nombre de archivo debe estar después de args. ¡Gracias!
rdrey
2
En una nota al margen, para formatear bien los correos electrónicos para una respuesta de solo texto, uso:fold -s -w 80 email.txt | sed 's/^.*$/> &/'
Marcello Romani
2
@ MarcelloRomani, ¿no deberías usar un ancho de 78 ya que estás anteponiendo dos caracteres?
niñera
1
Hmm ... supongo que sí. Gracias por señalar eso :)
Marcello Romani
2
Tenga en cuenta que foldrompe las URL, mientras fmtque no.
Skippy le Grand Gourou
51

Además de fold, eche un vistazo a fmt. fmtintenta elegir saltos de línea de manera inteligente para que el texto se vea bien. No rompe palabras largas, sino que se ajusta solo por espacios. También unirá líneas adyacentes, lo cual es bueno para la prosa pero malo para los archivos de registro u otro texto formateado.

Jonathan
fuente
3
Me gusta especialmente fmt -t en comparación con fold
lkraav
15

1) ancho de línea fijo asegurado con separación de palabras:

fold -w 80 <text.txt

2) ancho de línea fijo asegurado con un extraordinario salto de palabras (una palabra se rompe solo si es demasiado grande para caber en una línea):

fold -sw 80 <text.txt

3) un ancho de línea fijo prometedor sin división de palabras (si la palabra es demasiado grande para caber en una línea, todavía se deja como está, por lo que finalmente algunas líneas pueden ser más grandes de lo que necesita):

fmt -w 80 <text.txt
usuario2683246
fuente
Respuesta infravalorada. Disponible en la mayoría de los sistemas. Buena esa.
Merc
11

Otra herramienta (menos conocida) que hace lo que quieres es wrapde GNU Talkfilters :

wrap -w 80 < textfile

También (fuera del tema):

pero eso pone mucho espacio en la parte superior e inferior de las líneas impresas

agregue -tal invocar prpara omitir encabezados / trailers:

   -t, --omit-header
          omit page headers and trailers
don_crissti
fuente
5

Y para obtener más opciones de formato, consulte par: http://www.nicemice.net/par/

sendmoreinfo
fuente
2
Actualmente, el sitio web no funciona, existe el Archivo de Internet y el caché de Google, pero aún así esto muestra por qué es importante publicar más que solo enlaces, al menos podría haber publicado los ejemplos de la documentación oficial.
phk
-1
fold -w 100 -s text.txt

funcionó para mí ya que necesito dividir cada línea hasta 100 caracteres

Swathipriya Bandar
fuente
1
¿Qué agrega su respuesta que los demás no?
Sheljohn