sed
02 de Diciembre, 2009
sed es un editor de lineas que funciona como un filtro: cat | sed | tail
todas las salidas van a stdout
Ejemplos para el uso de sed
sed -n 1p archivo # Devuelve la primera linea y (-n) sin el texto original
sed -n 4,6p archivo # Devuelve de las lineas 4 a la 6
sed -n '4,$p' archivo # Devuelve de la linea 4 al final *
sed -n /^E/ archivo # Devuelve todas las lineas que empiezan con "E" (grep)
sed -n '/^E/,$p' archivo # desde la 1ª linea que empieza con "E" al final
sed 's/antes/después/g' archivo # Sustituye todos los "antes" por "despues"
sed 's/antes/después/' archivo # = pero solo el primero de cada linea
sed '1,3s/antes/después/g' archivo # = pero solo en las 3 primeras lineas
sed '/patrón/s/antes/después/g' archivo # = pero solo en lineas con ese patrón
sed '/p1/,/p2/s/antes/después/g' archivo # = pero con patrón p1 en linea previa
sed 'y/[123]/[456]/' archivo # Sustituye los "1" por "4", los "2" por "5"...
Las '' son necesarias para que el shell no sustituya $p como una variable
Editando un archivo:
cp archivo archivo.old sed -e 'comandos' -e 'mas-comandos' archivo.old >archivo
Comandos útiles
comentar una linea:
sed -e 's/patrón-a-dejar-comentado/#&/' # & = texto coincidente con el patrón
borrar una linea:
sed -e '/patrón/ d'
añadir al final (tras la última linea):
sed -e '$ a\ primera linea añadida\ segunda linea añadida'
insertar _ANTES_ de la última linea:
-e '$ i\ primera linea añadida\ segunda linea añadida'
añadir tras una cierta linea (si no existe esa linea no hace nada):
-e '/patrón-de-la-linea/ a\ linea añadida'
ATENCION: Los patrones de dirección /patrón/ no admiten agrupamiento con ()
Elimina una fila:
sed $numeroPelicula\d $listaPeliculas > $listaPeliculas\.tmp
modificar las cabeceras de archivos html de un directorio:
sed -i -e "s/charset=iso-8859-1/charset=utf-8/g" *html