sed

Nov 06 13:27

Sustituir un bloque de un archivo por un texto

Sustituir palabras o frases con sed en un archivo, es fácil, lo que no es trivial es que encuentre un bloque determinado de texto y ese bloque lo sustituya por otra cosa. Pero no que te sustituya por línea sino TODO el bloque. Aquí un ejemplo de cómo sustituir las entradas de los kernels que hay en un menu.lst del grub
#!/bin/sh
 
sed -i.bak -n -e '1,/### BEGIN AUTOMAGIC KERNELS LIST/ p' \
       -e '/### BEGIN AUTOMAGIC KERNELS LIST/ a\
Una lí­nea \
otra línea \
\
¿Una entrada del kernel?' \
       -e '/### END DEBIAN AUTOMAGIC KERNELS LIST/,$ p' menu.lst
Nov 04 11:30

Borrar la linea número N de un fichero con 'sed'

Aquellos que uséis ssh a diario con máquinas virtuales y demás, conoceréis el incordio que es arreglar esto: "Offending key in /home/usuario/.ssh/known_hosts:60" Normalmente yo abría con un "vi /home/usuario/.ssh/known_hosts +60" pulsaba dos veces la tecla 'd' y ':x', pero esto se hacía pesado, así que empecé a hacerlo con 'sed'. Y aquí tenéis dos ejemplos sencillos, uno para imprimir la linea N y otro para borrarla respectivamente:
sed -n '60p' /home/usuario/.ssh/known_hosts
sed -i '60d' /home/usuario/.ssh/known_hosts
Oct 09 03:32

Borrar una línea específica con sed

Algunos ejemplos de borrar líneas concretas con sed
# borrar la línea 18 del archivo '~/.ssh/known_hosts'
sed -i '18 d' ~/.ssh/known_hosts
 
# o también 
sed -i 18d ~/.ssh/known_hosts
 
# borrar algunas líneas:
# borrar 6 líneas a partir de la línea 8
sed -i 8,+6d file.txt 
 
 
# borrar la línea donde se encuentre el texto 'TO DELETE'
sed -i '/TO DELETE/ d' file.txt