Sed: Aprendiendo Shell Scripting usando el comando de terminal sed
El comando “sed” en los Sistemas Operativos Libres del tipo GNU/Linux es un comando muy versátil, ya que a su vez es considerado un editor de texto orientado a “flujo” en vez de “interactivo” como los típicos, ya que acepta como entrada un archivo o la entrada estándar, luego procesa cada línea y el resultado es enviado a la salida estándar. Es decir, SED (Stream EDitor) nos permite modificar el contenido de las diferentes líneas de un fichero en base a una serie de comandos o un fichero de comandos.
Por lo general, el comando “sed” es utilizado como un filtro, ya que lee cada linea de su entrada de datos y entonces realiza las acciones solicitadas que suelen ser leer, extraer, modificar y mostrar o guardar. Aunque su poder es tal que adicionalmente nos permite de una forma cómoda, borrar líneas, registros o sustituir cadenas de caracteres dentro de las líneas de un archivo.
Introducción al comando “sed”
Ya en otras publicaciones anteriores en DesdeLinux hemos hablado y mostrados ejemplos sobre el uso de dicho comando, tales como: Cómo borrar líneas específicas de un archivo… y Con el Terminal: Uso de expresiones regulares II: Reemplazos, por lo que en esta oportunidad veremos directamente ejemplos un poco más avanzados e igual de prácticos usando el mismo.
Básicamente el comando “sed” tiene la siguiente sintaxis:
sed comandos_sed archivo
Donde “comandos_sed” corresponde a uno o más especificaciones acerca de qué hacer con las líneas que se leen desde “archivo”.
Un uso más extenso nos deja con la sintaxis siguiente:
sed [-ns] '[direccion] instruccion argumentos'
Donde:
Ejemplos Prácticos
Listar Archivos/Carpetas de una ruta
Útil linea de comando que nos puede servir para listar el contenido de una ruta X indicada para luego detectar/contar/filtrar un ítem buscado e indicar una acción posterior a realizar.
ls -l | awk '{ print $NF }' | sed 1d
Ejemplo:
Esta otra variante usando el comando “sed” es muy útil:
find /opt/MilagrOS/file-apps/fondos_pantalla/ -type f | sed 's/^\.\///g' | xargs -n 1 basename
Crear una secuencia numérica
Mostrar por pantalla o grabar en un archivo una secuencia numérica (o cualquier otra entrada) creada pero en forma horizontal (lineal) y no vertical que luego puede ser leída para otros procesos.
seq 100|tr '\n' ' '|sed 's, $,\n,g'
El mismo ejemplo puedo realizarse combinando el comando “sed” con “printf” tal como se muestra a continuación:
printf '%s ' {1..100}|sed 's/ $/\n/'
Borrar archivos con exclusiones
Escudriñar una ruta del Sistema de Ficheros buscando patrones de archivos que excluir para luego borrar el resto del contenido. Muy útil para realizar limpiezas precisas y cuidadosas.
find /opt/MilagrOS/file-apps/fondos_pantalla/ -type f | sed -e '/.*\.txt$/d' -e '/.*\.exe$/d' | xargs rm
Crear una Dirección MAC virtual
Este paso puede ser útil para labores de protección o seguridad informática al navegar por sitios peligrosos o realizar labores de hacking.
MAC=`(date; cat /proc/interrupts) | md5sum | sed -r 's/^(.{10}).*$/\1/; s/([0-9a-f]{2})/\1:/g; s/:$//;'` ; echo $MAC
El mismo efecto puede lograrse utilizando el comando “sed” junto a otros comandos, tal como se muestra a continuación:
openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/.$//'
od -An -N10 -x /dev/random | md5sum | sed -r 's/^(.{10}).*$/\1/; s/([0-9a-f]{2})/\1:/g; s/:$//;'
od /dev/urandom -w6 -tx1 -An|sed -e 's/ //' -e 's/ /:/g'|head -n 1
Ejemplo:
Cambiar temporalmente el Prompt del Terminal
Esto nos puede servir para lograr insertar temporalmente parametros en nuestro prompt que nos puedan ser utiles mientras realizamos una actividad especial. En este ejemplo solo cambiaremos la forma en la que se muestra el prompt.
export PS1="C:\$( pwd | sed 's:/:\\\\\\:g' )\\> "
Gestionar la salida del Comando “ps”
Orden de comando muy practica para permitir el formateo a gusto de la salida del comando “ps” es decir, lo obtenido del Administrador de Procesos del Terminal.
sudo ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu | sed "/^ 0.0 /d"
Ejemplo:
Esto puede aplicarse para los procesos según el porcentaje de memoria consumido:
sudo ps -e -o pmem,nice,state,cputime,args --sort pmem | sed "/^ 0.0 /d"
Estos ejemplos de lineas de comando usando el comando “sed” espero les sea de gran utilidad. Y les sirvan para ser utilizadas directamente desde consola o indirectamente mediante su inserción en algún script (tarea automatizada).
En la siguiente publicación sobre Shell Scripting exploraremos otros comandos.
Si quieres aprender un poco más sobre el comando “sed” visita este enlace “Tutorial y Guía Breve para Unix y Linux” o “Uso básico” y si deseas aprender más sobre Shell Scripting en nuestro propio Blog, puedes darle un vistazo a nuestras otras publicaciones sobre el tema, haciendo clic aquí: Scripting en DesdeLinux.
El artículo Sed: Aprendiendo Shell Scripting usando el comando de terminal sed aparece primero en Sed: Aprendiendo Shell Scripting usando el comando de terminal sed.