Sed – trucos y tips

Noviembre 2016



Substitución

  • Substituir "foo" por "bar" en todas las líneas
    • Sólo en la 1ra ocurrencia
      • sed 's/foo/bar/'
    • Sólo en la 3ra ocurrencia
      • sed 's/foo/bar/3'
    • En todas las ocurrencias
      • sed 's/foo/bar/g'
    • Sólo en la penúltima ocurrencia
      • sed 's/\(.*\)foo\(.*foo\)/\1bar\2/'
    • Sólo en la última ocurrencia
      • sed 's/\(.*\)foo/\1bar/'
    • Substituir "foo" por "bar" sólo en las líneas que contienen “plop
      • sed '/plop/ s/foo/bar/g'
    • Substituir "foo" por "bar" menos en las líneas que contienen “plop
      • sed '/plop/! s/foo/bar/g'
    • Substituir "Foo" o "foo" por “bar” en todas las líneas
      • sed 's/[Ff]oo/bar/g'
    • Substituir "azul", "blanco" o “rojo” por “verde”
      • sed 's/azul\|blanco\|rojo/verde/g'

Visualización

  • La 1ra línea (head -1)
    • sed q
  • Las 5 primeras líneas (head -5)
    • sed '5q'
    • sed '1,5!d'
  • La última línea (tail -1)
    • sed -n '$p'
    • sed '$!d"
  • Las 5 últimas líneas (tail -5)
    • sed -e :a -e '$q;N;6,$D;ba'
  • Las 2 últimas líneas (tail -2)
    • sed '$!N;$!D'
  • Sólo las líneas que coinciden con un patrón o expresión regular
    • sed -n '/patrón/p'
    • sed '/regexp/!d'
  • Sólo las líneas que no coinciden con un patrón o expresión regular
    • sed -n '/patrón/!p'
    • sed '/regexp/d'
  • La línea anterior a un patrón o expresión regular
    • sed -n '/patrón/{g;1!p;};h'
  • La línea que sigue a un patrón o expresión regular
    • sed -n '/regexp/{n;p;}'

Eliminación


Espacio y tabulación

  • Eliminar los espacios y las tabulaciones
    • Al inicio de línea
      • sed 's/^[ \t]*//
      • sed 's/^\s*//'				# Uso del parámetro "\s"
    • Al final de la línea
      • sed 's/[ \t]*$//'
    • Al inicio y al final de la línea
      • sed 's/^[ \t]*//;s/[ \t]*$//'

Línea vacía

  • Eliminar las líneas vacías
    • Todas las líneas vacías
      • sed '/^$/d'
      • sed '/./!d'
    • Sólo las del encabezado
      • sed '/./,$!d'
      • sed -nr '/./,$s/(.*)/\1/p'
    • Sólo las del final
      • sed -e :a -e '/^\n*$/ {$d;N;ba' -e '}'

Intervalo regular

  • Eliminar una línea a intervalos regulares
    • Todas la líneas pares
      • sed '1~2d'
    • Todas la líneas impares
      • sed '2~2d'
    • Todas las n líneas a partir de la línea n
      • sed '3~2d'		# Todas les 2 líneas a partir de la línea 3

Diversos


Unir líneas

  • Unir líneas de 2 en 2
    • sed '$!N;s/\n//'
  • Unir líneas de 3 en 3
    • sed '$!N;s/\n//;$!N;s/\n//;'
  • Si una línea termina en un backslash (\), agregar la línea siguiente y reemplazar el final de línea (/n) por un espacio
    • sed -e :a -e '/\\$/N; s/\\\n/ /; ta'
  • Si un línea comienza con un signo igual (=), agregarla a la línea precedente y reemplazar el signo igual (=) por un espacio
    • sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D'

Visualización sin tener cuenta de las mayúsculas y minúsculas


(Mostrar únicamente las líneas que coinciden con un patrón sin tener en cuenta las mayúsculas y minúsculas)

El comando sed posee un flag – ver [ Sed – Introducción a Sed – Parte 1]- que permite buscar un patrón sin tener en cuenta las mayúsculas y minúsculas, pero este flag se aplica únicamente al comando de substitución (comando s).

A continuaron veremos un truco que permite utilizar este flag para mostrar (o no mostrar) líneas que coinciden con un patrón dado sin tener en cuenta de las mayúsculas y minúsculas.
Para ello, tan solo hay que utilizar el comando de substitución “s” asociado al [ metacaracter "&"] y al flag “I”.

Ejemplo para mostrar únicamente las líneas que contienen el termino “patron” (o Patron, PATRON, pAtron, etc.)
  • sed -n 's/patron/&/Ip' fichero


Consulta también :
El documento «Sed – trucos y tips» de CCM (es.ccm.net) se encuentra disponible bajo una licencia Creative Commons. Puedes copiarlo o modificarlo siempre y cuando respetes las condiciones de dicha licencia y des crédito a CCM.