Uso del comando sed con ejemplos

Uso del comando sed con ejemplos.

El comando SED es un editor de secuencias capaz de realizar funciones en archivos como, buscar, reemplazar, insertar y eliminar.

Puedes editar archivos sin tener que abrirlos, por tanto no es necesario abrir un editor y modificar la cadena, la operación se automatiza.

También se admiten expresiones regulares que permiten comparar patrones complejos, aunque el uso más común del comando es para buscar y reemplazar o sustituir cadenas.

En este articulo aprenderemos como usar el comando, y aportaremos algunos ejemplos útiles.

Uso del comando sed con ejemplos 1

 

Uso del comando sed

La sintaxis del comando y su explicación.

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

Donde:
  • [direccion]: Es opcional, pero podemos especificar un número de línea (N), rango de números de línea (N,M) o búsqueda de regexp (/cadena/) indicando donde deben buscar las instrucciones. Si no se especificamos nada trabajara sobre todo el contenido.
  • Instruccion (opciones)r:
    • i = Insertar línea antes de la línea actual.
    • a = Insertar línea después de la línea actual.
    • c = Cambiar línea actual.
    • d = Borrar línea actual.
    • p = Imprimir línea actual en stdout.
    • s = Sustituir cadena en línea actual.
    • r fichero = Añadir contenido de «fichero» a la línea actual.
    • w fichero = Escribir salida a un fichero.
    • ! = Aplicar instrucción a las líneas no seleccionadas por la condición.
    • q = Finalizar procesamiento del fichero.
  • -n: No mostrar por stdout las líneas que están siendo procesadas.
  • -s: Tratar todos los ficheros entrantes como contenido separado.

Nota: Una «regexp«, es una «expresión regular«.

Uso del comando sed con ejemplos 2

 

Uso del comando sed con ejemplos

Ejemplos de reemplazo

Reemplazar cadenas:

sed 's/^unix/linux/g' fichero > fichero2

Reemplazar cadenas sólo en las lineas que contentan una cadena:
sed '/cadena_a_buscar/ s/vieja/nueva/g' fichero > fichero2

Indicar las lineas donde reemplazar cadenas:
sed '5,6 s/vieja/nueva/g' fichero > fichero2

Sustituir múltiples cadenas:
sed 's/cadenas1\|cadenas2/nuevacadena/g'

 

Ejemplos de añadir (insertar)

Insertar espacios en blanco al principio de cada línea: En el ejemplo añadimos cinco.

sed 's/^/     /' archivo

Añadir una línea antes o después del fichero: Lo indicamos con ($=).
sed -e '$i Demo' archivo > archivo2

sed -e '$a Demo' archivo > archivo2

Insertar una linea en blanco antes de cada linea (que cumpla una regex):
sed '/cadena/{x;p;x;}' archivo

Añadir una linea en blanco detrás de cada linea (que cumpla una regex):
sed '/cadena/G' archivo

Insertar una linea en blanco antes y después de cada linea (que cumpla una regex):
sed '/cadena/{x;p;x;G;}' archivo

Insertar una línea en blanco: En el ejemplo cada cinco lineas.
sed 'n;n;n;n;G;' archive

Insertar un número de línea antes de cada línea:
sed = filename | sed 'N;s/\n/\t/' archivo

Añadir el número de línea, exclusivamente si tiene contenido:
sed '/./=' archivo | sed '/./N; s/\n/ /'

Si una línea termina en «\» (barra invertida) unirla con la siguiente:
sed -e :a -e '/\\$/N; s/\\\n//; ta' archivo

 

Seleccionar y visualizar

Ver las primeras cinco líneas de un fichero:

sed 5q

Ver las ultimas diez líneas de un fichero:
sed -e :a -e '$q;N;11,$D;ba'

Visualizar un rango concreto de líneas: Con cat -n indicamos el nuemero de linea, con sed -n, no imprime ninguna excepto las indicadas.
cat -n fich2 | sed -n '2,3 p'

Mostrar la primera o ultima línea de un archivo:
sed -n '1p' archivo

sed -n '$p' archivo

Visualizar las líneas que no hagan match con regexp:
sed '/regexp/!d' archivo

sed -n '/regexp/p' archivo

Ver la siguiente línea a una regexp:
sed -n '/regexp/{n;p;}' archivo

Mostrar desde una regexp, hasta el final del archivo:
sed -n '/regexp/,$p' archivo

Mostrar las líneas que contengan 75 caracteres o más:
sed -n '/^.\{75\}/p' archivo

Ver las líneas que contengan 75 caracteres o menos:
sed -n '/^.\{75\}/!p' archivo

sed '/^.\{75\}/d' archivo

 

Ejemplos de eliminar

Borrar el rango indicado de líneas en un archivo:

sed '4,6 d' archivo > archivo1.txt

Borrar todas las líneas de un archivo excepto las indicadas:
sed '4,6 !d' archivo > archivo1.txt

Eliminar la ultima linea:
sed '$d' archivo

Eliminar desde la línea indicada hasta el final:
sed '3,$d' archivo > archivo1.txt

Borrar las líneas que tengan una cadena:
sed '/cadena/ d' archivo > archivo1.txt

sed '/^cadena/ d' archivo > archivo1.txt

sed '/^cadena$/ d' archivo > archivo1.txt

Borrar líneas en blanco de un archivo:
sed '/^$/d' archivo > archivo1.txt

Quitar los espacios al principio de la línea:
sed 's/^ *//g' archivo

Quitar los espacios existentes al final de cada línea:
sed 's/ *$//' archivo

Eliminar los espacios que sobran: Al principio, al final de línea, o las dos opciones.
  • Al principio.

sed 's/^[ \t]*//' archivo
  • Al final.

sed 's/[ \t]*$//' archivo
  • Al principio y al final.

sed 's/^[ \t]*//;s/[ \t]*$//' archivo

Eliminar los tags de HTML:
sed -e :a -e 's/<[^>]*>//g;/</N;//ba' archivo

Borrar las líneas duplicadas que no sean consecutivas:

sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P' archivo

Eliminar líneas en blanco y comentarios bash:
sed '/^$/d; / *#/d' archivo > archivo1.txt

 

Uso del comando sed con ejemplos

En Sololinux.es seguimos creciendo gracias a nuestros lectores, puedes colaborar con el simple gesto de compartir nuestros artículos en tu sitio web, blog,  foro o redes sociales.

 

Agregar comentario