salto de línea de texto a html con sed y vim

publicado el 2018-08-09


por alguna razón que desconozco, ya varias veces me he visto en la necesidad de convertir las newlines, “saltos de líneas” de un archivo de texto plano, a la etiqueta de salto de línea en html: <br/>. aquí comparto cómo hacerlo de manera relativamente automatizada con los programas sed y vim.

con vim

normalmente lo hago usando una expresión regular en vim, el editor de texto que suelo usar.

si quiero realizar la operación entre las líneas 10 y 20, inclusivo, escribo este comando:

:10,20s:$:<br/>:g

ahora que lo veo no tiene mucho sentido sin conocer las convenciones… ¿pero qué no todo es así?

lo podemos traducir a: en el rango de líneas entre 10 y 20, busca (search, s) : el final de la línea ($) y reemplázalo : por la secuencia de caracteres <br/> : y aplícalo en todas las apariciones (g)

rata panchis enfrente de una laptop pequeña, con un signo de interrogación volando e intermitente

qué clase de hechicería es esta

la g en este caso es innecesaria porque solo hay un final de línea por cada línea. pero ya saben, la costumbre…

si quisiera aplicarlo en todo el documento, quedaría así:

:%s:$:<br/>:g

con sed

sed es el nombre del programa (creo que por “stream editor” (¿editor de flujos/corrientes?)) que luego veo que las personas “pro” usan para este tipo de tareas.

una ventaja de usar sed en vez de vim es que el comando se puede guardar como un script que después se aplique a varios archivos, sin tener que estar abriendo vim y escribiendo lo anterior (como si abrir vim y escribir lo anterior fuera demasiado trabajo).

creo que en vim también se pueden guardar comandos, pero esa investigación será para otra ocasión…

alguna vez ya lo había usado, pero por si las dudas me metí al manual con man sed para ver qué encontraba. mi comando para la terminal terminó (jeje) viéndose así:

$ sed 's/$/<br\/>/' archivo_original.txt > archivo_nuevo.html

también es hechicería pero tiene similitudes con el comando en vim, debido a que también es una “expresión regular” (en algún momento habrá que hacer una guía al respecto - de inicio ni sé por qué se llaman así si no me parecen regulares…).

algo importante es que como en <br/> hay una diagonal ( / ), y ese caracter es el separador de la expresión ’s/ / /‘, hay que “escaparlo” con una diagonal invertida y por eso queda <br\/>.

y el símbolo de > hace que la salida del comando se le “sume” al archivo nuevo, que si no existe entonces se crea.

(no pretendo que esto tenga sentido de inicio, solo espero que en algún momento después de un tiempo al regresar acá una pueda decir “ah sí, ya entendí”)