1. Un editor sin pantalla
sed es la abreviatura de stream editor, editor de flujo. El nombre describe su manera de trabajar, que es distinta de la de nano o vim:
sed lee su entrada línea por línea, aplica a cada una las órdenes de edición que se le dieron en la línea de comandos, y escribe el resultado en su salida.
sed, que se repite hasta agotar la entrada. Cada línea se procesa por separado, sin memoria de las anteriores.Es un filtro, con todas las propiedades que conocemos: lee de un archivo o de su entrada estándar, escribe en su salida, y por defecto no modifica el archivo original. Las tres diferencias con un editor interactivo:
nano, vim | sed | |
|---|---|---|
| Las órdenes se dan | Sobre la marcha, mirando el texto | De antemano, en la línea de comandos |
| El texto se ve | Todo, en pantalla | No se ve: pasa |
| Sirve para | Un cambio pensado en un archivo | El mismo cambio en muchas líneas, muchos archivos, o en una tubería |
sed es un lenguaje completo, con decenas de órdenes. En la práctica, nueve de cada diez usos son una sola: sustituir. Empezamos por ella y le dedicamos la mitad del tema.
2. La orden s: sustituir
sed 's/Rosario/ROS/g' ventas.csv
│ │ │ │ │
│ │ │ │ └─ el archivo de entrada
│ │ │ └─ modificador: en todas las apariciones de cada línea
│ │ └─ el texto que lo reemplaza
│ └─ lo que se busca: una expresión regular
└─ la orden: s, sustituir
La orden completa va entre comillas simples, para que la shell no interprete nada. Tiene tres partes separadas por barras: la letra s, lo que se busca y el reemplazo. Las tres barras son obligatorias, también la última.
$ cd ~/practica
$ sed 's/Rosario/ROS/' ventas.csv | head -n 3
2026-10-01,Luis,ROS,teclado,2,90
2026-10-01,Marta,Mendoza,monitor,1,320
2026-10-02,Ana,Salta,mouse,5,75
$ grep -c Rosario ventas.csv # el archivo sigue igual
5
Las líneas donde no hay nada que sustituir pasan sin cambios: sed escribe todas las líneas, modificadas o no. Es la diferencia con grep, que solo deja pasar algunas. Y el archivo no se tocó: el resultado está en la pantalla, y se puede enviar a una tubería o redirigir a otro archivo.
Como en toda tubería, sed acepta también la salida de otro comando:
$ pwd | sed 's/ana/USUARIO/'
/home/USUARIO/practica
3. La primera aparición, y la g
La orden s tiene un comportamiento por defecto que sorprende a todos la primera vez:
Si lo buscado aparece tres veces en una línea, se cambia la primera y las otras dos quedan como estaban. Para reemplazarlas todas se agrega una g, de global, después de la última barra. Es el olvido más frecuente con sed, y el resultado —un archivo cambiado a medias— puede pasar inadvertido.
$ head -n 1 ventas.csv | sed 's/,/;/' # solo la primera
2026-10-01;Luis,Rosario,teclado,2,90
$ head -n 1 ventas.csv | sed 's/,/;/g' # todas
2026-10-01;Luis;Rosario;teclado;2;90
$ head -n 1 ventas.csv | sed 's/,/;/2' # solo la segunda
2026-10-01,Luis;Rosario,teclado,2,90
| Modificador | Efecto |
|---|---|
| Ninguno | Reemplaza la primera aparición de cada línea. |
g | Reemplaza todas las apariciones de cada línea. |
Un número, como 2 | Reemplaza solo esa aparición. |
I | No distingue mayúsculas de minúsculas al buscar. |
p | Imprime la línea si hubo reemplazo. Se usa con -n; sección 9. |
Los modificadores se combinan: s/luis/LUIS/Ig reemplaza todas las apariciones, estén escritas como estén. «Global» se refiere a la línea, no al archivo: sed recorre siempre el archivo entero; lo que la g cambia es cuántas veces actúa dentro de cada línea.
4. Buscar con expresiones regulares
La parte de búsqueda no es un texto fijo: es una expresión regular, con todo lo del tema 28. Y como allí, hay dos dialectos. Sin opciones, sed usa el básico; con -E, el extendido, que es el que adoptamos:
$ sed -E 's/[0-9]+$/XXX/' ventas.csv | head -n 2 # el número del final
2026-10-01,Luis,Rosario,teclado,2,XXX
2026-10-01,Marta,Mendoza,monitor,1,XXX
$ sed -E 's/^[^,]*,//' ventas.csv | head -n 2 # quitar el primer campo
Luis,Rosario,teclado,2,90
Marta,Mendoza,monitor,1,320
El segundo ejemplo muestra una forma muy usada: un reemplazo vacío. Entre la segunda y la tercera barra no hay nada, de modo que lo encontrado se sustituye por nada: se borra. Así se eliminan prefijos, sufijos, espacios sobrantes o columnas.
| Orden | Efecto |
|---|---|
s/^/> / | Agrega > al comienzo de cada línea: el ancla coincide con una posición, y ahí se inserta. |
s/$/;/ | Agrega un punto y coma al final de cada línea. |
s/[[:space:]]+$// | Quita los espacios del final de cada línea. |
s/^[[:space:]]+// | Quita los espacios del comienzo. |
s/#.*// | Quita los comentarios: desde un # hasta el final de la línea. |
s/ +/ /g | Reduce varios espacios seguidos a uno. |
Las dos primeras filas no «reemplazan» ningún carácter. Las anclas ^ y $ coinciden con posiciones vacías, y sustituir una posición vacía por un texto es insertarlo. Vale también lo aprendido sobre la codicia: s/,.*// borra desde la primera coma hasta el final, porque .* toma todo lo que puede.
5. El reemplazo: & y los grupos
La parte de reemplazo es texto literal, con dos excepciones que le dan a sed su potencia. Permiten volver a usar lo que se encontró.
| En el reemplazo | Vale por |
|---|---|
& | Todo el texto que coincidió con la búsqueda. |
\1, \2, … | El texto que coincidió con el primer grupo entre paréntesis, con el segundo, y así. |
El ampersand sirve para agregar algo alrededor de lo encontrado sin perderlo:
$ sed -E 's/[0-9]+$/$& pesos/' ventas.csv | head -n 2
2026-10-01,Luis,Rosario,teclado,2,$90 pesos
2026-10-01,Marta,Mendoza,monitor,1,$320 pesos
$ sed 's/.*/"&"/' tareas.txt | head -n 2 # cada línea, entre comillas
"Comprar pan"
"Llamar a Luis"
La búsqueda no sabía qué número había al final de cada línea; el & lo reprodujo, cualquiera fuese.
Los grupos van más lejos, y son las retrorreferencias que anunciamos en el tema anterior. Se rodea con paréntesis cada parte que interesa conservar, y en el reemplazo se las vuelve a colocar en el orden que se quiera. Para pasar las fechas de año-mes-día a día/mes/año:
$ sed -E 's|^([0-9]{4})-([0-9]{2})-([0-9]{2})|\3/\2/\1|' ventas.csv | head -n 3
01/10/2026,Luis,Rosario,teclado,2,90
01/10/2026,Marta,Mendoza,monitor,1,320
02/10/2026,Ana,Salta,mouse,5,75
^([0-9]{4}) grupo 1: cuatro dígitos, al comienzo → 2026
- un guion, que no se conserva
([0-9]{2}) grupo 2: dos dígitos → 10
- otro guion
([0-9]{2}) grupo 3: dos dígitos → 01
\3/\2/\1 el reemplazo: grupo 3, barra, grupo 2, barra, grupo 1
Con la misma técnica se intercambian columnas, cosa que cut no sabía hacer:
$ sed -E 's/^([^,]*),([^,]*),([^,]*)/\1,\3,\2/' ventas.csv | head -n 2
2026-10-01,Rosario,Luis,teclado,2,90
2026-10-01,Mendoza,Marta,monitor,1,320
Como el & es especial en el reemplazo, para escribir uno literal hay que escaparlo: \&.
6. Otros delimitadores
En el ejemplo de las fechas, la orden no usó barras para separar sus partes, sino barras verticales. Es una libertad de la orden s: el carácter que sigue a la s es el delimitador, sea cual sea.
Hace falta cuando el texto a buscar o a reemplazar contiene barras, lo que ocurre siempre con las rutas. Con el delimitador habitual, cada barra del texto habría que escaparla:
$ pwd | sed 's/\/home\/ana/~/' # con barras: hay que escapar cada una
~/practica
$ pwd | sed 's|/home/ana|~|' # con otro delimitador: se lee
~/practica
La primera forma es conocida, con humor, como el «síndrome del palillo inclinado». Los delimitadores alternativos más usados son |, #, , y :; conviene elegir uno que no aparezca en el texto.
7. Direcciones: a qué líneas
Hasta aquí cada orden se aplicó a todas las líneas. Anteponiéndole una dirección se la limita a algunas.
Una dirección es una condición, escrita delante de una orden, que indica a qué líneas se aplica: un número de línea, un patrón, o un rango entre dos de ellos.
| Dirección | La orden se aplica a… |
|---|---|
3 | La línea 3. |
$ | La última línea. |
2,4 | Las líneas de la 2 a la 4. |
3,$ | Desde la 3 hasta el final. |
/Salta/ | Las líneas que coinciden con esa expresión regular. |
/inicio/,/fin/ | Desde una línea que coincide con la primera expresión hasta la siguiente que coincide con la segunda. |
2,4! | Todas menos las de la 2 a la 4. El signo de exclamación niega. |
$ sed '3s/^/HECHO: /' tareas.txt # solo en la línea 3
Comprar pan
Llamar a Luis
HECHO: Pagar la luz
Estudiar vim
Regar las plantas
$ sed '/Rosario/s/Luis/L./' ventas.csv | head -n 4 # solo en las líneas de Rosario
2026-10-01,L.,Rosario,teclado,2,90
2026-10-01,Marta,Mendoza,monitor,1,320
2026-10-02,Ana,Salta,mouse,5,75
2026-10-02,L.,Rosario,cable,10,40
El segundo ejemplo se lee en dos tiempos: «en las líneas que contienen Rosario, sustituir Luis por L.». La dirección elige las líneas; la orden actúa dentro de ellas. El Luis que vendió en Salta, más abajo, quedaría intacto.
Hay que distinguir los dos usos de una expresión entre barras. Sola y delante, /Rosario/ es una dirección: selecciona líneas. Después de una s es lo que se busca para reemplazar. En /Rosario/s/Luis/L./ aparecen los dos.
8. d: borrar líneas
La segunda orden en importancia es d, de delete. Elimina la línea: no la escribe en la salida. Casi siempre lleva una dirección, porque sin ella borraría todo.
$ sed '2,4d' tareas.txt # borrar de la línea 2 a la 4
Comprar pan
Regar las plantas
$ sed '/Luis/d' tareas.txt # borrar las que contienen «Luis»
Comprar pan
Pagar la luz
Estudiar vim
Regar las plantas
| Orden | Borra | Equivale a |
|---|---|---|
sed '1d' | La primera línea: el encabezado de un archivo de datos. | tail -n +2 |
sed '$d' | La última línea. | head -n -1 |
sed '/^$/d' | Las líneas vacías. | grep -v '^$' |
sed '/^#/d' | Las líneas de comentario. | grep -v '^#' |
sed '/patrón/d' | Las que coinciden. | grep -v 'patrón' |
sed '/patrón/!d' | Las que no coinciden. | grep 'patrón' |
La tercera columna muestra que d con una dirección de patrón hace lo mismo que grep -v. Para ese único fin, grep es más claro. sed conviene cuando el borrado es por número de línea, por rango entre dos patrones, o cuando en la misma pasada hay además algo que sustituir.
9. p y -n: mostrar solo algunas
La orden p, de print, escribe la línea en la salida. Sola parece inútil, porque sed ya escribe todas las líneas al terminar cada ciclo; con ella, las elegidas aparecerían duplicadas. Cobra sentido junto con una opción de la línea de comandos:
La opción -n desactiva la escritura automática: sed no muestra ninguna línea, salvo las que una orden p imprima expresamente.
$ sed -n '2,4p' tareas.txt # solo las líneas 2 a 4
Llamar a Luis
Pagar la luz
Estudiar vim
$ sed -n '$p' tareas.txt # solo la última
Regar las plantas
$ sed -n '/Salta/p' ventas.csv # solo las que coinciden: como grep
2026-10-02,Ana,Salta,mouse,5,75
2026-10-05,Luis,Salta,mouse,3,45
La primera forma es la herramienta que prometimos en el tema 12, cuando extraer un tramo de un archivo exigía combinar head y tail. sed -n '20,30p' archivo lo dice directamente, y es la manera habitual de mirar las líneas que rodean a un error cuando un mensaje indica «línea 25».
El rango entre dos patrones no tiene equivalente simple en otras herramientas. Extrae un bloque delimitado por su contenido:
$ sed -n '/10-02/,/10-05/p' ventas.csv
2026-10-02,Ana,Salta,mouse,5,75
2026-10-02,Luis,Rosario,cable,10,40
2026-10-03,Marta,Rosario,teclado,1,45
2026-10-03,Ana,Mendoza,monitor,2,640
2026-10-05,Luis,Salta,mouse,3,45
En un archivo de configuración o en un registro, así se obtiene una sección: desde la línea que la abre hasta la que la cierra. El rango termina en la primera línea que coincide con el segundo patrón, y por eso la otra venta del día 5 no figura.
Con -n, el modificador p de la orden s muestra únicamente las líneas donde hubo un reemplazo: sed -n 's/Salta/SLA/p' ventas.csv selecciona y transforma en un solo paso.
10. Insertar, añadir y otras órdenes
| Orden | Nombre | Efecto |
|---|---|---|
i texto | insert | Inserta una línea antes de la indicada. |
a texto | append | Añade una línea después. |
c texto | change | Reemplaza la línea entera por ese texto. |
y/abc/xyz/ | transliterate | Cambia caracteres uno por uno, como tr. |
q | quit | Termina en ese punto, sin leer el resto. |
= | Escribe el número de la línea. |
$ sed '1i fecha,vendedor,ciudad,producto,cantidad,importe' ventas.csv | head -n 3
fecha,vendedor,ciudad,producto,cantidad,importe
2026-10-01,Luis,Rosario,teclado,2,90
2026-10-01,Marta,Mendoza,monitor,1,320
$ sed '$a -- fin de la lista --' tareas.txt | tail -n 2
Regar las plantas
-- fin de la lista --
$ sed '2q' tareas.txt # terminar después de la línea 2: como head -n 2
Comprar pan
Llamar a Luis
El primer ejemplo resuelve una tarea real: agregar la fila de títulos a un archivo de datos que no la tiene. Insertar antes de la línea 1 es poner algo al principio; añadir después de la última, con $a, es poner algo al final.
q es valiosa en archivos enormes. sed -n '1000p' archivo imprime la línea 1000 y sigue leyendo hasta el final, inútilmente; sed -n '1000{p;q}' archivo la imprime y termina.
11. Varias órdenes a la vez
Una sola pasada de sed puede aplicar varias órdenes. Cada línea las recibe en el orden en que están escritas, y cada una trabaja sobre el resultado de la anterior. Hay tres maneras de escribirlas:
| Forma | Ejemplo |
|---|---|
| Separadas por punto y coma | sed 's/a/b/; s/c/d/' archivo |
Una opción -e por orden | sed -e 's/a/b/' -e 's/c/d/' archivo |
| En un archivo, una por línea | sed -f ordenes.sed archivo |
$ sed 's/Rosario/ROS/; s/Mendoza/MZA/; s/Salta/SLA/' ventas.csv | cut -d, -f3 | sort | uniq -c
3 MZA
5 ROS
2 SLA
Podrían haberse encadenado tres sed con tuberías, con el mismo resultado y tres procesos en lugar de uno. Cuando todas las órdenes son sustituciones independientes, una sola invocación es más limpia.
Para aplicar varias órdenes a las mismas líneas, se las agrupa entre llaves detrás de una dirección común:
$ sed -n '/Salta/{s/mouse/MOUSE/; s/,/ | /g; p}' ventas.csv
2026-10-02 | Ana | Salta | MOUSE | 5 | 75
2026-10-05 | Luis | Salta | MOUSE | 3 | 45
El orden importa. Si una orden produce un texto que la siguiente busca, se encadenan: s/a/b/; s/b/c/ convierte las «a» en «c». Y una d corta el ciclo: las órdenes que la siguen no se ejecutan para esa línea.
12. -i: modificar el archivo
Todo lo anterior dejó los archivos intactos. Cuando el propósito es justamente cambiar el archivo, la redirección no sirve: sed '…' archivo > archivo lo vacía, por lo que vimos en el tema 23. Para eso sed tiene una opción propia.
La opción -i, de in place, hace que sed escriba el resultado en el mismo archivo que leyó, reemplazando su contenido. No muestra nada en la pantalla.
Es la opción con la que sed deja de ser inofensivo. La probamos sobre una copia:
$ cp ventas.csv /tmp/v.csv
$ sed -i 's/Rosario/ROS/' /tmp/v.csv # sin salida: el archivo cambió
$ grep -c ROS /tmp/v.csv
5
$ sed -i.bak 's/Salta/SLA/' /tmp/v.csv # con copia de respaldo
$ ls /tmp/v.csv*
/tmp/v.csv /tmp/v.csv.bak
Con un sufijo pegado a la opción, como -i.bak, sed guarda antes una copia del original con ese sufijo. Es la forma prudente, y no cuesta nada.
Una expresión regular que coincide con más de lo previsto, aplicada con -i a un archivo de configuración o a cincuenta archivos de un proyecto, los cambia todos en un instante y en silencio. El procedimiento seguro tiene tres pasos, y son los de siempre: ejecutar la orden sin -i y mirar el resultado; recuperar la línea con la flecha arriba y agregar -i.bak; comprobar, y recién entonces borrar los respaldos.
- Ver qué líneas cambiarían:
sed -n 's/viejo/nuevo/gp' archivo. mirar - Aplicar con respaldo:
sed -i.bak 's/viejo/nuevo/g' archivo. cambiar - Comparar el original y el resultado:
diff archivo.bak archivo. comprobar
diff, que muestra las diferencias entre dos archivos, es el tema 31. Dos detalles más sobre -i. Por dentro no modifica el archivo: escribe uno nuevo y lo pone en el lugar del anterior, de modo que el archivo cambia de inodo, y un enlace duro al original deja de acompañarlo, según lo que vimos en el tema 14. Y acepta varios archivos, con lo que un comodín o un find … -exec aplican el mismo cambio a todo un proyecto: razón de más para probar antes.
13. sed entre las otras herramientas
Varias cosas que hace sed las hacen también otros filtros, y conviene tener un criterio para elegir:
| Tarea | Con sed | Con otra herramienta | Conviene |
|---|---|---|---|
| Mostrar las líneas que coinciden | sed -n '/x/p' | grep 'x' | grep |
| Quitar las que coinciden | sed '/x/d' | grep -v 'x' | grep |
| Las primeras N líneas | sed 'Nq' | head -n N | head |
| Un rango de líneas | sed -n '5,9p' | head -n 9 | tail -n 5 | sed |
| Cambiar un carácter por otro | sed 'y/,/;/' | tr ',' ';' | tr |
| Cambiar un texto por otro | sed 's/x/y/g' | — | sed |
| Reordenar partes de una línea | sed -E 's/(a)(b)/\2\1/' | awk | Según el caso |
| Calcular con los campos | — | awk | awk |
El territorio propio de sed es la sustitución de texto: nada lo hace mejor ni de manera más breve. Para seleccionar, grep es más claro. Y para todo lo que tenga que ver con columnas y con cuentas, lo indicado es awk, que estudiamos en el tema siguiente.
Hay una coincidencia que vale la pena notar, porque ahorra aprendizaje. La orden de sustitución de sed es la misma de vim, que vimos en el tema 13, y las direcciones también: :2,4d, :%s/viejo/nuevo/g. Los dos descienden del mismo antepasado, el editor ed, de donde también salió grep.
14. Recetas y errores comunes
| Quiero… | Comando |
|---|---|
| Cambiar un texto por otro en todo un archivo | sed 's/viejo/nuevo/g' archivo |
| Lo mismo, modificando el archivo | sed -i.bak 's/viejo/nuevo/g' archivo |
| Ver las líneas 20 a 30 | sed -n '20,30p' archivo |
| Quitar la primera línea | sed '1d' archivo |
| Quitar comentarios y líneas vacías | sed -E '/^[[:space:]]*(#|$)/d' archivo |
| Quitar los espacios del final de cada línea | sed -E 's/[[:space:]]+$//' archivo |
| Convertir finales de línea de Windows | sed 's/\r$//' archivo |
| Comentar una línea de configuración | sed -E 's/^(opcion=.*)/# \1/' archivo |
| Cambiar el valor de una opción | sed -E 's/^(puerto=).*/\18080/' archivo |
| Agregar una fila de títulos | sed '1i a,b,c' archivo |
Las dos filas sobre configuración muestran el uso más frecuente de sed en administración: cambiar un ajuste desde un script, sin abrir un editor. En la última de ellas, \1 conserva el nombre de la opción, y lo que sigue es el valor nuevo.
| Síntoma | Causa | Solución |
|---|---|---|
| Solo cambió una vez por línea. | Falta el modificador g. | s/a/b/g |
unterminated `s' command | Falta la barra final, o el texto contiene una barra sin escapar. | Cerrar con la tercera barra; usar otro delimitador. |
Los paréntesis o el + no funcionan. | Falta -E: se están tomando como texto. | sed -E |
| Se borró más de lo esperado. | Un .* codicioso. | Una clase negada: [^,]*. |
| El archivo quedó vacío. | Se usó sed … archivo > archivo. | sed -i. |
| Una variable no se reemplazó dentro de la orden. | Las comillas simples impiden la expansión. | Comillas dobles: sed "s/$viejo/$nuevo/". |
| No encuentra un texto que ocupa dos líneas. | sed procesa de a una línea. | Otra herramienta, o técnicas avanzadas de sed. |
La referencia del tema:
| Se escribe | Qué hace |
|---|---|
sed 's/a/b/' | Reemplaza la primera aparición de cada línea. |
sed 's/a/b/g' | Reemplaza todas. |
sed -E 's/(x)(y)/\2\1/' | Usa expresiones extendidas, y grupos en el reemplazo. |
sed 's|a|b|' | Lo mismo, con otro delimitador. |
sed '3s/a/b/', sed '/x/s/a/b/' | Solo en la línea 3; solo en las líneas que coinciden. |
sed '2,4d', sed '/x/d' | Borra líneas. |
sed -n '2,4p', sed -n '/x/p' | Muestra solo esas líneas. |
sed '1i texto', sed '$a texto' | Inserta al principio; añade al final. |
sed 'a; b' | Varias órdenes. |
sed -i.bak '…' archivo | Modifica el archivo, guardando una copia. |
Los archivos de /tmp pueden quedar; el directorio de práctica no se modificó. En el tema 30 conocemos la última gran herramienta del bloque, la que entiende de columnas y sabe sumar: awk.
15. Resumen
sedes un editor de flujo: lee línea por línea, aplica las órdenes dadas y escribe el resultado. Por defecto no modifica el archivo.s/búsqueda/reemplazo/sustituye. Sin modificador actúa sobre la primera aparición de cada línea; cong, sobre todas.- La búsqueda es una expresión regular; con
-E, extendida. Un reemplazo vacío borra lo encontrado. - En el reemplazo,
&vale por todo lo encontrado, y\1,\2por los grupos entre paréntesis, que se pueden reordenar. - El carácter que sigue a la
ses el delimitador:s|a|b|evita escapar las barras de una ruta. - Una dirección delante de una orden la limita a ciertas líneas: un número,
$, un rango, un patrón, o un rango entre dos patrones. dborra las líneas indicadas.- Con
-nno se escribe nada salvo lo que imprima la ordenp:sed -n '20,30p'muestra un tramo del archivo. iyainsertan y añaden líneas;qtermina antes de leer todo.- Varias órdenes se separan con punto y coma; las llaves las agrupan bajo una misma dirección.
-iescribe el resultado en el propio archivo. Antes se prueba la orden sin esa opción, y se usa-i.bakpara conservar el original.sedes la herramienta para sustituir texto; para seleccionar líneas convienegrep, y para columnas y cálculos,awk.
16. Preguntas de repaso
Intenta responder cada una antes de abrir la respuesta.
1. ¿Modifica el archivo el comando sed 's/a/b/' datos.txt?
No. Escribe el resultado en su salida. Para modificar el archivo hace falta la opción -i.
2. ¿Qué diferencia hay entre s/a/b/ y s/a/b/g?
La primera reemplaza solo la primera aparición de cada línea. La segunda, todas.
3. ¿Qué hace sed 's/ *$//' archivo?
Quita los espacios que haya al final de cada línea: los sustituye por nada.
4. ¿Qué hace sed 's/^/# /' archivo?
Agrega # al comienzo de cada línea. El ancla coincide con la posición inicial, y el texto se inserta allí.
5. ¿Qué representa el & en el reemplazo?
Todo el texto que coincidió con la búsqueda. s/[0-9]+/(&)/ rodea con paréntesis el número encontrado.
6. ¿Qué hace sed -E 's/([^,]*),([^,]*)/\2,\1/'?
Intercambia los dos primeros campos de cada línea de un archivo separado por comas.
7. ¿Por qué se escribe a veces s|a|b| en lugar de s/a/b/?
Porque el carácter que sigue a la s es el delimitador, y elegir uno distinto de la barra evita tener que escapar las barras de una ruta.
8. ¿Qué diferencia hay entre sed '5s/a/b/' y sed '/5/s/a/b/'?
La primera aplica la sustitución solo a la línea número 5. La segunda, a las líneas que contienen el carácter «5».
9. ¿Qué hacen sed '1d', sed '$d' y sed '/^$/d'?
Borran la primera línea, la última, y las líneas vacías, respectivamente.
10. ¿Para qué sirve la opción -n?
Desactiva la escritura automática de cada línea. Solo aparece lo que una orden p imprima, lo que permite mostrar una selección de líneas.
11. Escribe el comando para mostrar las líneas 100 a 120 de un archivo.
sed -n '100,120p' archivo
12. ¿Qué muestra sed -n '/INICIO/,/FIN/p' archivo?
El bloque que va desde la primera línea que contiene «INICIO» hasta la siguiente que contiene «FIN», ambas incluidas.
13. ¿Cómo se agrega una línea al principio de un archivo, y cómo al final?
Con sed '1i texto' se inserta antes de la primera línea, y con sed '$a texto' se añade después de la última.
14. ¿Qué hace -i.bak, y qué conviene hacer antes de usarla?
Modifica el archivo en su lugar, guardando una copia del original con el sufijo .bak. Antes conviene ejecutar la misma orden sin -i y revisar el resultado.
15. ¿Por qué no funciona sed 's/$nombre/X/' archivo si nombre es una variable?
Porque entre comillas simples la shell no expande las variables. Hay que usar comillas dobles: sed "s/$nombre/X/" archivo.
Para practicar
- Con
ventas.csvy sin modificarlo: cambiamonitorporpantalla; cambia todas las comas por tabulaciones (\t); quita el campo de la fecha. - Muestra las líneas 4 a 7 de
ventas.csv, luego solo la última, y luego todas menos la primera y la última. - Con grupos, convierte cada línea de
ventas.csval formatoLuis vendió 2 teclado en Rosario. Empieza por describir los seis campos con([^,]*). - Agrega a
tareas.txt, sin modificarlo, un guion y un espacio al comienzo de cada línea, y un punto al final. - Numera las tareas combinando
nlysed, de modo que queden como1) Comprar pan. - En una copia de
informe.txten/tmp, elimina los comentarios y las líneas vacías con una sola invocación desed. ¿Cuántas líneas quedan? - Sobre esa copia, aplica el procedimiento de la sección 12 para cambiar todos los
tcpporTCP: primero mira, luego-i.bak, luego compara condiff … | head. - Muestra de
/etc/passwdsolo el nombre y la shell de cada cuenta, con el formatoana usa /bin/bash, usando una sola sustitución con grupos. - Con
ls -l | sed -E, deja de cada línea solo los permisos y el nombre. Pista: describe lo del medio con.*y aprovecha la codicia. - Prueba
sed 's/a/b' tareas.txtysed 's/(a)/[\1]/' tareas.txt. Lee los resultados, explícalos y corrígelos.