Lee un renglón a la vez a partir de los archivos de la entrada, aplica los comandos de la lista, por orden, a cada renglón y escribe su forma editada en la salida estándar, las comillas son necesarias porque muchos de los metacaracteres de sed significan también algo para el shell (sed no altera los contenidos de la entrada), sed reconoce los comandos de grep, egrep y de fgrep.
Su sintaxis es de la forma:
sed [opciones] ´[comandos]´ archivos-de-entrada.
Algunas de sus opciones son:
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 salida estándar.
s Sustituir cadena en línea actual.
r archivo Añadir contenido de “archivo” a la línea actual.
w archivo Escribir salida a un archivo.
! Aplicar instrucción a las líneas no seleccionadas por la condición.
q Finalizar procesamiento del archivo.
sed '3d' archivo.txt borra la tercera línea de archivo.txt
# cat archivo.txt hola1 hola2 hola3 hola4 hola5 # sed '3d' archivo.txt hola1 hola2 hola4 hola5
sed '3p' archivo.txt imprime dos veces linea 3 del archivo archivo.txt
# cat archivo.txt hola1 hola2 hola3 hola4 hola5 # sed '3p' archivo.txt hola1 hola2 hola3 hola3 hola4 hola5
sed '2q' archivo.txt muestra hasta la linea 2 del archivo.txt
# cat archivo.txt hola1 hola2 hola3 hola4 hola5 # sed '2q' archivo.txt hola1 hola2
sed '=' archivo.txt imprime los números de línea del archivo.txt.
# cat archivo.txt hola1 hola2 hola3 hola4 hola5 root@kali:~/ejemplos# sed '=' archivo.txt 1 hola1 2 hola2 3 hola3 4 hola4 5 hola5sed 's/hola/pepe/' archivo.txt sustituye la primera aparición en cada línea de hola por pepe en archivo.txt
# cat archivo.txt hola1 hola-1 hola-2 hola2 hola-1 hola-2 hola3 hola-1 hola-2 hola4 hola-1 hola-2 hola5 hola-1 hola-2 # sed 's/hola/pepe/' archivo.txt pepe1 hola-1 hola-2 pepe2 hola-1 hola-2 pepe3 hola-1 hola-2 pepe4 hola-1 hola-2 pepe5 hola-1 hola-2sed 's/hola/pepe/g' archivo.txt remplaza la palabra hola por pepe del fichero archivo.txt en todas las apariciones.
# cat archivo.txt hola1 hola-1 hola-2 hola2 hola-1 hola-2 hola3 hola-1 hola-2 hola4 hola-1 hola-2 hola5 hola-1 hola-2 # sed 's/hola/pepe/g' archivo.txt pepe1 pepe-1 pepe-2 pepe2 pepe-1 pepe-2 pepe3 pepe-1 pepe-2 pepe4 pepe-1 pepe-2 pepe5 pepe-1 pepe-2
sed '1,3s/hola/pepe/g' archivo.txt todas las veces que aparezca hola se reemplace por pepe, pero solo hasta la línea 3, inclusive.
# cat archivo.txt hola1 hola-1 hola-2 hola2 hola-1 hola-2 hola3 hola-1 hola-2 hola4 hola-1 hola-2 hola5 hola-1 hola-2 # sed '1,3s/hola/pepe/g' archivo.txt pepe1 pepe-1 pepe-2 pepe2 pepe-1 pepe-2 pepe3 pepe-1 pepe-2 hola4 hola-1 hola-2 hola5 hola-1 hola-2
sed '/^$/d' fichero borrar las líneas en blanco del archivo.txt
# cat archivo.txt hola1 hola-1 hola-2 hola2 hola-1 hola-2 hola3 hola-1 hola-2 hola4 hola-1 hola-2 hola5 hola-1 hola-2 # sed '/^$/d' archivo.txt hola1 hola-1 hola-2 hola2 hola-1 hola-2 hola3 hola-1 hola-2 hola4 hola-1 hola-2 hola5 hola-1 hola-2
sed 's/<[^>]*>//g;/' archivo2.txt elimina la etiquetas HTML del archivo archivo2.txt
También se puede especificar un rango de caracteres de la forma:
[:alnum:] Alfanumérico [a-z A-Z 0-9]
[:alpha:] Alfabético [a-z A-Z]
[:blank:] Espacios o tabuladores
[:cntrl:] Cualquier carácter de control.
[:digit:] Dígitos numéricos [0-9]
[:graph:] Cualquier carácter visible (no espacios en blanco).
[:lower:] Minúsculas [a-z]
[:print:] Caracteres que no sean de control.
[:punct:] Caracteres de puntuación.
[:space:] Espacio en blanco.
[:upper:] Mayúsculas [A-Z]
[:xdigit:] Dígitos hexadecimales [0-9 a-f A-F]
sed 's/[[:lower:]]/a/g' archivo.txt todas las letras minúsculas del archivo.txt serán remplazadas por la letra a
# cat archivo.txt hola1 hola-1 hola-2 hola2 hola-1 hola-2 hola3 hola-1 hola-2 hola4 hola-1 hola-2 hola5 hola-1 hola-2 # sed 's/[[:lower:]]/a/g' archivo.txt aaaa1 aaaa-1 aaaa-2 aaaa2 aaaa-1 aaaa-2 aaaa3 aaaa-1 aaaa-2 aaaa4 aaaa-1 aaaa-2 aaaa5 aaaa-1 aaaa-2
Nota: Si necesitas un comando más potente puedes usar awk.
Tengo un problema, requiero insertar una línea al principio del archivo de texto, lo ejecuto de la siguiente manera:
sed "1i\hola" archivo.txt
Pero me devuelve:
sed: command garbled: 1i\hola
Sin embargo si lo ejecuto de esta manera, si lo hace:
sed "1i\\
hola" archivo.txt
Cual es la forma correcta de hacerlo en una sola línea, ya me canse de buscar y nadie hace referencia a esto, me pueden ayudar por favor?
Esta es mi plataforma: SunOS hsad01 5.10 Generic_150400-09 sun4v sparc sun4v