Post

Sed y regex

Sed y regex

Aquí una chuletilla para cuando quiera hacer sustituciones rapidas:

Modo seguro

Con sed -i y comandos de borrado es mejor probar primero sin modificar nada. Puedes usar sed sin -i, o sed -i.bak para dejar copia. Para borrados con find, xargs o rm, primero cambia rm por ls o printf y revisa la lista. Si hay nombres con espacios, usa -print0 y xargs -0.

Sustitucion cadena:

1
sed -i 's/word1/word2/g' input

Podemos sustituir directamente y hacer una copia de seguridad con:

1
sudo sed -i'.bak' 's/bullseye/bookworm/g' /etc/apt/sources.list

Encuentra la palabra word1 y sustituyela por word2 usando sed

1
sed -i 's/word1/word2/g' input

Podemos cambiar el delimitador de una manera simple:

1
2
sed -i 's+word1+word2+g' input
sed -i 's_word1_word2_g' input

Podemos añadir la opcion I para que sea “insensitive”

1
2
sed -i 's/word1/word2/gI' input
sed -i 's_word1_word2_gI' input

Sustitucion cadena en vi

1
:s/esto/poresto/g

Aplico a todo el contenido del fichero

1
:%s/esto/poresto/g

Elimino lineas en blanco:

1
cat archivo | sed '/^ *$/d' > nuevo_archivo

Simulando lo que va a hacer

1
find . -mtime +4 |awk '{print "ls " $1}

Añadiendo el ksh ejecutamos la acción

1
2
find . -mtime +4 |awk '{print "ls " $1}|ksh
find . -mtime +4 |awk '{print "rm -r " $1}|ksh

Todo el contenido de un directorio y subdirectorios con permisos (mejor redireccionar a un archivo)

1
find . | awk '{print "ls -l " "*" $1}'|sh > ruta
1
find . |sed 's/(/\\(/g' | sed 's/)/\\)/g' |sed 's/ /\\ /g' |sed 's/\&/\\\&/g'|sed 's/\$/\\\$/g' | awk  'BEGIN { FS=":" } {print "ls -l " $1}' 

Encuentra | sustituye interior de []

1
find . |sed 's/[()\ \&\$]/\\&/g' | awk  'BEGIN { FS=":" } {print "ls -l " $1}'

Listo contenido de directorio, y lo meto en un fichero

1
ls -1 *pdf >los_buenos

Lista el contenido de un directorio, y lo comparas con el contenido de un archivo, mostrara en pantalla el contenido que difiera.

1
ls -1 *pdf | grep -v -f los_buenos

Borra, del directorio, las lineas del fichero los buenos, que estan en el directorio.

1
ls -1 *pdf | grep -v -f los_buenos  | xargs rm

Chuletas de tratamiento:

1
2
3
 ls -1 *pdf | awk '{ print "mv " $1 " directorio"}'
 ls -1 *pdf | awk '{ print "mv " $0 " directorio"}'
 ls -1 *pdf | awk '{ print "mv \"" $0 "\" directorio"}'

Borrar por inodos:

1
 find . -inum <inode> -exec rm -i {} \;

Consolidacion de regex y parseos

Buscar IPs en logs

1
grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' fichero.log | sort -u

Recuento por columna

1
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head

Sustitucion con sed

1
sed -E 's/[0-9]{4}-[0-9]{2}-[0-9]{2}/<FECHA>/g' fichero.log
This post is licensed under CC BY 4.0 by the author.