¿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.

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".


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.


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

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

5

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


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


1
¿Qué agrega su respuesta que los demás no?
Sheljohn
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.