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. Los campos obligatorios están marcados con *

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