Aprende leyendo en orden

sed — Sustitución y extracción

Practica sed: 's/a/X/' reemplaza la primera coincidencia por línea y g reemplaza todas, -n '2p' imprime una línea específica, '/two/d' elimina las líneas que coinciden y -i edita el archivo en el sitio — ilustrado y en una terminal del navegador.

Reemplazar texto — s/old/new/ y g

sed es un editor de flujo: lee la entrada línea a línea, la transforma con las reglas que le das y escribe el resultado. El uso más común es la sustitución, escrita como sed 's/old/new/'. s significa sustituir, / separa las partes y reemplaza old por new. La parte old también puede usar las expresiones regulares que aprendiste antes (^ $ . *).

Sin una g al final, s/old/new/ reemplaza solo la primera coincidencia encontrada en cada línea. Añadir g al final como en s/old/new/g reemplaza cada coincidencia en esa línea.

FormaSignificadoEjemplo
s/old/new/Reemplaza solo la primera coincidencia por líneased 's/a/X/' f
s/old/new/gReemplaza todas las coincidencias en la líneased 's/a/X/g' f
Sustitución s frente al flag g
sed 's/a/X/' fsolo la primera apor línea -> Xsed 's/a/X/g' ftoda a en la línea -> X
Sin g solo cambia la primera coincidencia en la línea; con g se reemplaza cada coincidencia en la línea.
printf 'aaa\nbbb\n' > s.txt   # crear el archivo material
sed 's/a/X/' s.txt             # solo la primera a -> Xaa
sed 's/a/X/g' s.txt            # todas las a -> XXX

① Crea un archivo material de dos líneas con printf 'aaa\nbbb\n' > s.txt.

② Ejecuta la sustitución básica de sed que convierte a en X y comprueba que solo se reemplaza el primer carácter de cada línea.

③ Luego ejecuta la forma con el flag al final que sustituye en toda la línea y comprueba que cada a se convierte en X. (Si lo ejecutas correctamente, aparecerá una explicación.)

Linux console
0 / 3 completado(s)
Loading Linux Terminal...

Extraer y eliminar líneas — -n 'Np' y /pat/d

sed -n 'Np' imprime solo la línea N. Pones el número de línea que quieres mostrar en lugar de N (para la línea 2, 2p). Como sed imprime todas las líneas por defecto, -n desactiva esa salida automática y p (print) indica explícitamente la línea que quieres mostrar. Así, sed -n '2p' solo muestra la segunda línea.

sed '/pat/d' elimina las líneas que coinciden con pat y muestra el resto. d es delete y la parte /pat/ es la condición que selecciona las líneas a borrar. Úsalo cuando quieras descartar solo las líneas que contienen cierta palabra y ver el resto.

FormaSignificadoEjemplo
-n 'Np'Imprime solo la línea Nsed -n '2p' f
/pat/dElimina las líneas que coinciden con patsed '/two/d' f
Extraer con -n p frente a eliminar con /pat/d
sed -n '2p' fmostrar solo línea 2(descartar el resto)sed '/two/d' fborrar línea two,mantener el resto
-n 'Np' extrae solo la línea especificada, mientras que /pat/d muestra todo excepto las líneas que coinciden.
printf 'one\ntwo\nthree\n' > lines.txt   # crear el archivo material
sed -n '2p' lines.txt                      # solo la línea 2, two
sed '/two/d' lines.txt                     # one y three, sin la línea two

① Crea un archivo material de tres líneas con printf 'one\ntwo\nthree\n' > lines.txt.

② Combina la opción que desactiva la salida automática con la directiva que imprime un número de línea específico y usa sed para mostrar solo la segunda línea.

③ Luego usa la directiva que elimina las líneas que coinciden para mostrar el resto con la línea que contiene two borrada.

Linux console
0 / 3 completado(s)
Loading Linux Terminal...

Editar un archivo en el sitio — sed -i

Hasta ahora sed solo ha imprimido resultados en pantalla, dejando el archivo original sin cambios. Añadir sed -i edita el archivo directamente con el resultado. Es muy útil para reemplazos masivos en archivos de configuración, pero como el contenido original no se conserva, después de reescribir usemos cat para comprobar el contenido.

FormaSignificadoEjemplo
-iEdita el archivo en el sitiosed -i 's/a/Z/' f
sed -i cambia el archivo, no la pantalla
sed 's/a/Z/' fresultado impreso(f sin cambios)sed -i 's/a/Z/' ff se reescribeen el sitio
Sin -i solo imprime en pantalla; con -i reescribe el propio archivo.

sed -i no se puede deshacer

sed -i reescribe el archivo en el sitio y no conserva el contenido original. Antes de usarlo en un archivo de configuración real, la manera segura es ejecutarlo primero sin -i, comprobar el resultado en pantalla, confirmar que hace lo que quieres y solo entonces añadir -i.

printf 'apple\nbanana\n' > fruit.txt   # crear el archivo material
sed -i 's/apple/cherry/' fruit.txt      # editar el archivo en el sitio
cat fruit.txt                            # comprobar cherry y banana

① Crea un archivo material de dos líneas con printf 'apple\nbanana\n' > fruit.txt.

② Usando la sustitución de sed con la opción que edita el archivo en el sitio, cambia apple por cherry.

③ Ejecuta cat fruit.txt y comprueba que el propio archivo se ha reescrito con cherry y banana.

Linux console
0 / 3 completado(s)
Loading Linux Terminal...
QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1¿Cómo se comporta sed 's/a/X/' f en cada línea?

Pregunta 2¿Qué muestra ejecutar sed -n '2p' f?

Pregunta 3¿Qué hace el -i en sed -i 's/a/Z/' f?