UNIX – Comando SED trucos y tips utiles.-

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

El siguinte ejemplo permite mostrar las lineas comprendidasen tre los patrones (al principio de linea) “Revisando puertos” y “Proceso ejecucion”. Muestra solo ese fragmento del archivo :

cat $salida | sed -n ‘/^Revisando puertos/,/^Proceso en ejecucion/p’

Esta entrada fue publicada en Unix - Linux. Guarda el enlace permanente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.