Todo administrador de sistemas Linux tiene que trabajar con archivos de texto plano a diario. Mediante una herramienta de la línea de comandos llamada sed, se pueden visualizar rangos determinados de líneas de un archivo, reemplazar palabras, y filtrar contenido por palabras clave, por nombrar algunos ejemplos. En este post y en el siguiente veremos algunos ejemplos clásicos del uso de este comando.
TIP 1: Mostrar un rango de líneas de un archivo con sed
Si bien disponemos de herramientas tales como head y tail para poder visualizar el comienzo o el fin de un archivo, ¿Qué pasa si queremos observar una sección determinada en medio del mismo? Si recurrimos a sed, podemos lograr este objetivo fácilmente. El siguiente ejemplo nos permitirá ver las líneas 5 a 10 de /etc/passwd:
[pastacode lang=»bash» manual=»sed%20-n%20’5%2C10p’%20%2Fetc%2Fpasswd» message=»» highlight=»» provider=»manual»/]
TIP 2: Mostrar el archivo entero excepto un rango específico
Si la situación fuera a la inversa de la descripta en el punto anterior y quisiéramos ver todo el archivo con excepción de un rango determinado, podemos usar:
[pastacode lang=»bash» manual=»sed%20’20%2C35d’%20%2Fetc%2Fpasswd» message=»» highlight=»» provider=»manual»/]
El comando anterior mostrará todo el archivo /etc/passwd omitiendo las líneas 20-35.
TIP 3: Mostrar líneas y rangos no consecutivos
Otra variante puede consistir en mostrar una serie de líneas y/o rangos que no sean consecutivos. En el siguiente ejemplo vamos a mostrar las líneas 5 a 7 y 10 a 13 de /etc/passwd:
[pastacode lang=»bash» manual=»sed%20-n%20-e%20’5%2C7p’%20-e%20’10%2C13p’%20%2Fetc%2Fpasswd» message=»» highlight=»» provider=»manual»/]
Como podemos observar, la opción -e nos permite ejecutar una acción dada (en este caso, mostrar líneas) para cada rango especificado. En general, esta misma opción puede utilizarse tantas veces como se desee, y acepta como argumento (entre comillas simples) cualquier comando sed, los cuales podemos consultar en la página dedicada a esta herramienta en el sitio del Proyecto GNU.
TIP 4: Mostrar líneas que contengan una palabra clave o expresión regular
Otro uso muy conocido de esta utilidad consiste en mostrar las líneas de un archivo que contengan una palabra clave o una expresión regular. Por ejemplo, quizás nos interese mostrar los eventos de autenticación que se registraron en un servidor CentOS (a partir del contenido de /var/log/secure) el día 4 de julio. Para lograrlo, utilizamos ^Jul 4 como expresión regular de búsqueda para inspeccionar aquellas líneas que posean la cadena Jul 4 al comienzo de cada línea (denotado por ^):
[pastacode lang=»bash» manual=»sed%20-n%20’%2F%5EJul%20%204%2F%20p’%20%2Fvar%2Flog%2Fsecure» message=»» highlight=»» provider=»manual»/]
Cabe aclarar que los tips presentados en este post pueden combinarse mediante tuberías para lograr otros comandos más complejos, cosa que veremos en el siguiente post junto con la funcionalidad de sustitución de sed.