Taula de continguts

sed

Stream EDitor

sintaxis

sed [-ns] '[direccion] instruccion argumentos'

donde:

sed 's/busca/reemplaza/g' /path/to/file(s)

parámetros

ejemplos

reemplaza «abc» por «zyz» en el archivo1 generando el archivo2:

sed s/abc/xyz/g archivo1  > archivo2

actualiza el fichero, misma sustitución anterior

sed -i s/abc/xyz/g archivo1

idem anterior, pero con variables:

sed "s|$var1|$var2|" archivo1  > archivo2''

realiza una sustitución solo si la línea contiene un valor determinado, si la linea contiene requisito, cambia el texto1 por el texto2 :

 sed -e "/requisito/s/texto1/texto2/g"

listar archivos/carpetas de una ruta:

ls -l | awk '{ print $NF }' | sed 1d

cambio temporal de prompt (PS1):

export PS1="C:\$( pwd | sed 's:/:\\\\\\:g' )\\> "

eliminar línea en concreto (la 3)

sed "3d" distros-deb.txt > distros-deb-ok.txt
sed -i "3d" distros-deb.txt # reescribe el fichero

más eliminaciones aplicadas en un cierto rango

sed -i "3,5d" distros-deb.txt # de la línea 3 a la 5
sed -i "2,$d" distros-deb.txt # de la línea 2 al final

ejemplo docker

sed -i /etc/ssh/sshd_config \
            -e 's/#PermitRootLogin.*/PermitRootLogin no/' \
            -e 's/#RSAAuthentication.*/RSAAuthentication yes/'  \
            -e 's/#PasswordAuthentication.*/PasswordAuthentication no/'

ejemplos avanzados

añadir texto a una línea, respetando el contenido existente (y haciendo match). Uso de subexpresión (backreference)

sed -i "1,12s/\(host: \)[^ ]*/\1localhost/" config/database.yml

insertar línea antes de match, backup del fichero modificado

sed -i.bak '/<\/tomcat-users>/ i\<user username="admin" password="password" roles="admin,manager-gui,admin-gui"/>' /opt/tomcat/conf/tomcat-users.xml

búsquedas

buscar frases de un texto que tengas 6 palabras (y acaben en algo que no sea una letra):

grep -E '^([a-zA-Z]+[^a-zA-Z]+){6}$' frases

buscar palíndromos de 7 letras1)

grep '^\(.\)\(.\)\(.\).\3\2\1$' /usr/share/dict/words
1)
palabra capicúa