vim o sed/awk/etc – pad todas las líneas con espacios de ancho fijo

¿Cómo puedo almohadilla de cada línea de un archivo a un determinado ancho (dicen 63 caracteres de ancho), relleno con espacios si es necesario?

Por ahora, vamos a suponer que todas las líneas están garantizados para ser de menos de 63 caracteres.

Yo uso vim y prefiere hacerlo de una manera no (¿hay algún tipo de printf %63s current_line comando?) donde puedo seleccione las líneas que desea aplicar el relleno.

Sin embargo, por cierto, estoy abierto a la utilización de sed, awk, o algún tipo de linux herramienta para hacer el trabajo también.

saludos.

8 Kommentare

  1. 32

    vim

    :%s/.*/\=printf('%-63s', submatch(0))
    • fantástico, muchas gracias! No me había dado cuenta de que usted podría utilizar printf dentro del campo de sustitución en vim, voy a tener que leer.
    • el .63 precisión no es necesaria aquí.
    • Nota, sin embargo, que este comando no funciona correctamente para una codificación multibyte (como UTF-8), ya que printf() cuenta de la cadena de anchura en bytes. Yo recomendaría un la solución alternativa.
  2. 7

    En Vim, me gustaría utilizar el comando

    :%s/$/\=repeat(' ',64-virtcol('$'))

    Si el texto de la almohadilla es sólo ASCII y no contener caracteres de tabulación, es
    posible el uso de col() en lugar de virtcol().

  3. 1

    Con sed, sin bucle:

    sed -i '/.\{63\}/!{s/$/                                                               /;s/^\(.\{63\}\).*/\1/}' file

    Asegúrese de tener suficiente espacio en el 1er sustitución para que coincida con la cantidad de espacio que desea agregar.

  4. 1

    Esto podría funcionar para usted:

    sed -i ':a;/.\{63\}/!{s/$//;ba}' file

    o tal vez más eficaces, pero menos elegante:

    sed -i '1{x;:a;/.\{63\}/!{s/^//;ba};x};/\(.\{63\}\).*/b;G;s//\1/;y/\n//' file
    • Hum, el bucle que no es necesario.
    • cierto, pero transparente.
  5. 0

    Parece que se siente cómodo usando vim, pero aquí es un puro Bash/simple-sed solución en caso de tener que hacerlo desde la línea de comandos (nota 63 espacios en la sed de sustitución):

    sed 's/$/                                                              /' yourFile.txt |cut -c 1-63

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea