Después de grep, el siguiente paso lógico es un tutorial sobre sed. El comando sed proviene de Stream EDItor y, como su nombre lo indica, se ocupa del flujo de texto. Sin embargo, si sed es uno de los comandos más poderosos de Unix, su página de manual también se encuentra entre las más enigmáticas. Intentaré en este artículo resumir el uso más básico de sed y luego daré algunos ejemplos de scripts avanzados.
Lo esencial
El comando general para sed es algo así como:
sed [option] '{script}' [text file]
Sed realizará las operaciones que desea que realice en el archivo de texto y mostrará el resultado en la salida estándar. Si desea el resultado en un archivo de texto, puede redirigirlo mediante el método habitual:
sed [option] '{script}' [text file] > [edited text file]
O usa la opción “-i
” que editará directamente el archivo de entrada:
sed -i[option] '{script}' [text file]
Ahora empecemos a trabajar en el guión. El primer paso más obvio es el script nulo:
solo mostrará el texto en test.txt.
Un buen uso de sed es la eliminación. Practiquemos a través de ejemplos.
eliminará las líneas 2 a 4 de test.txt.
Puedes adivinar que la sintaxis del script es:
sed '[first line to delete] [last line to delete] d' test.txt
Pero la parte elegante viene cuando usa expresiones regulares, o regex, como delimitador para la eliminación. Por ejemplo,
eliminará todas las líneas que comiencen con «#» (en otras palabras, si codifica, eliminará todos sus comentarios).
La sintaxis general es
para eliminar la línea que contiene la expresión regular.
sed '/regex1/,/regex2/ d' test.txt
para eliminar el intervalo de la línea que contiene regex1 a la línea que contiene regex2.
El carácter especial “^” que usé en el primer ejemplo es para indicar el comienzo de la línea.
Entonces, el segundo uso básico que se me ocurre es la sustitución. La sintaxis general es:
sed -re 's/regex1/regex2/' test.txt
Tendrá como efecto buscar en la primera línea regex1, reemplazarlo con regex2, pasar a la siguiente línea y repetir hasta el final del flujo de entrada.
Un buen ejemplo es:
sed -re 's/^# *//' test.txt
Reemplazará el símbolo «#» al comienzo de una línea y todos los espacios en blanco con nada. En otros términos, descomenta el archivo de texto. El símbolo «*» es un metacarácter que diseña 0 o más espacios en blanco aquí.
Avanzado
Puedes hacer algunas cosas bastante sofisticadas con sed, pero alcanzarás el límite bastante rápido si no prestas atención a su comportamiento básico. Sed trata el flujo de forma lineal: aplica un tratamiento línea por línea a un archivo de texto. Si desea hacer más de una modificación en una misma línea, debe usar etiquetas y tratamiento multilínea. Todo esto puede volverse muy complejo, muy rápidamente. Ahora le mostraré algunos ejemplos avanzados y se los explicaré. Si quieres más, estoy seguro de que puedes buscar por ti mismo y usar los conceptos básicos que te di.
Si desea eliminar las líneas vacías de un archivo, puede utilizar el comando
sed -re '/^$/ {N; D}' test.txt
El metacarácter «$» significa el final de la línea, por lo que «^$» diseña una línea vacía. Entonces, “{N;D}” es una sintaxis bastante compleja para decir eliminar esa línea.
Si desea eliminar todas las etiquetas en un archivo html, este es el comando para usted:
sed -re ':start s/<[^>]*>//g; /</ {N; b start}' test.txt
El «:inicio» se llama etiqueta. Es un poco como una etiqueta dentro del script al que queremos volver más tarde para aplicar múltiples cambios a una misma línea. sed busca cualquier cosa con la forma «
Conclusión
Ahora está listo para estudiar sed más profundamente, o simplemente usarlo para modificaciones simples. Es un comando que encuentro particularmente útil en scripts en general, pero me tomó un tiempo entender su sintaxis. Espero que sea mucho más rápido para ti.
¿Conoces otro comando básico para sed? ¿O usa otro script avanzado que involucra sed que desea compartir? Por favor, háganos saber en los comentarios.