REFERENCIA RÁPIDA DE SED
Edición de flujo, sustitución, direcciones, espacio de retención, transformaciones
Fundamentos
Ejecutar sed
sed 's/old/new/' file.txt # substitute first match per line
sed 's/old/new/g' file.txt # substitute all matches per line
sed -n '5p' file.txt # print only line 5
sed '3d' file.txt # delete line 3
echo "hello" | sed 's/hello/hi/' # pipe input
Banderas de Línea de Comandos
| -n | Suprimir impresión automática; imprimir solo con p |
| -e 'cmd' | Ejecutar un comando sed (encadenar con múltiples -e) |
| -f script.sed | Leer comandos desde un archivo |
| -i[suffix] | Editar archivo en sitio (sufijo de respaldo opcional) |
| -E / -r | Usar expresiones regulares extendidas |
Sustitución
Sintaxis de Sustitución
sed 's/foo/bar/' f # first occurrence per line
sed 's/foo/bar/g' f # all occurrences
sed 's/foo/bar/3' f # 3rd occurrence only
sed 's/foo/bar/gi' f # all, case-insensitive
sed 's|/usr/bin|/opt/bin|g' f # alternate delimiter
Banderas de Sustitución
| g | Reemplazar todas las ocurrencias en la línea |
| N (number) | Reemplazar solo la N-ésima ocurrencia |
| p | Imprimir línea si se realizó la sustitución |
| w file | Escribir las líneas sustituidas en un archivo |
| i / I | Coincidencia sin distinción de mayúsculas (GNU) |
Direcciones
Ejemplos de Direcciones
sed '3s/a/b/' f # only on line 3
sed '2,5s/a/b/' f # lines 2 through 5
sed '/^#/d' f # delete lines starting with #
sed '/start/,/end/d' f # delete range between patterns
sed '1~2d' f # delete odd-numbered lines (GNU)
Tipos de Direcciones
| N | Número de línea N |
| $ | Última línea |
| N,M | Rango de líneas de N a M |
| /regex/ | Líneas que coinciden con regex |
| /regex1/,/regex2/ | Rango desde la primera hasta la segunda coincidencia |
| N~step | Desde N, cada step-ésima línea (GNU) |
| addr! | Negar — aplicar a líneas no coincidentes |
Eliminar e Imprimir
Comandos de Eliminar e Imprimir
sed '5d' f # delete line 5
sed '/^$/d' f # delete blank lines
sed -n '10,20p' f # print lines 10–20
sed -n '/error/p' f # print lines matching pattern
sed '/debug/!d' f # keep only matching lines
Referencia de Comandos
| d | Eliminar espacio de patrón, iniciar siguiente ciclo |
| D | Eliminar hasta el primer salto de línea en el espacio |
| p | Imprimir el espacio de patrón |
| P | Imprimir hasta el primer salto de línea en el espacio |
| q | Salir después de imprimir el espacio de patrón actual |
| Q | Salir sin imprimir (GNU) |
Insertar y Agregar
Insertar, Agregar, Cambiar
sed '3i\inserted line' f # insert before line 3
sed '3a\appended line' f # append after line 3
sed '3c\replaced line' f # replace line 3
sed '/marker/a\new line' f # append after pattern match
Comandos
| i\text | Insertar texto antes de la línea actual |
| a\text | Agregar texto después de la línea actual |
| c\text | Reemplazar la línea actual con texto |
| r file | Leer y agregar el contenido del archivo |
| R file | Leer y agregar una línea del archivo (GNU) |
| w file | Escribir el espacio de patrón en el archivo |
Espacio de Retención
Comandos del Espacio de Retención
| h | Copiar el espacio de patrón al espacio de retención |
| H | Agregar el espacio de patrón al espacio de retención |
| g | Copiar el espacio de retención al espacio de patrón |
| G | Agregar el espacio de retención al espacio de patrón |
| x | Intercambiar los espacios de patrón y retención |
Ejemplos del Espacio de Retención
sed -n '1!G;h;$p' f # reverse lines (tac)
sed '/^$/{ x; s/\n//; x; }' f # collapse hold on blank
sed -n 'H;${x;s/\n/ /g;p;}' f # join all lines with space
Múltiples Comandos
Encadenar Comandos
sed -e 's/foo/bar/g' -e 's/baz/qux/g' f
sed 's/foo/bar/g; s/baz/qux/g' f
sed '/header/{ s/old/new/; s/foo/bar/; }' f
sed -f commands.sed input.txt
Agrupación y Ramificación
| { cmd1; cmd2; } | Agrupar comandos para la misma dirección |
| :label | Definir una etiqueta de rama |
| b label | Saltar (ir) a la etiqueta |
| t label | Saltar si el último s/// tuvo éxito |
| T label | Saltar si el último s/// falló (GNU) |
Edición en Sitio
Ejemplos de Edición en Sitio
sed -i 's/old/new/g' file.txt # edit in place (GNU)
sed -i.bak 's/old/new/g' file.txt # backup as file.txt.bak
sed -i '' 's/old/new/g' file.txt # macOS in-place (no backup)
sed -i '/^#/d' config.txt # remove comments in place
Notas de Plataforma
| GNU sed -i | El sufijo es opcional; -i solo edita sin respaldo |
| BSD/macOS sed -i | Requiere argumento de sufijo; usar -i '' sin respaldo |
| -i.bak | Crea archivo de respaldo con extensión .bak |
| Multiple files | sed -i 's/a/b/g' *.txt edita todos los archivos coincidentes |
Regex
Regex en sed
| . | Cualquier carácter individual |
| * | Cero o más del anterior |
| \+ | Uno o más (BRE) — + en ERE |
| \? | Cero o uno (BRE) — ? en ERE |
| ^ | Inicio de línea |
| $ | Fin de línea |
| [abc] | Clase de caracteres |
| \( \) | Grupo de captura (BRE) — () en ERE |
| \1, \2 | Referencia inversa al grupo de captura |
| & | Cadena completa coincidente (en el reemplazo) |
Ejemplos de Regex
sed 's/[0-9]\+/NUM/g' f # replace numbers
sed -E 's/(foo)(bar)/\2\1/g' f # swap groups (ERE)
sed 's/.*/(&)/' f # wrap line in parens
sed 's/[ \t]*$//' f # strip trailing whitespace
Patrones Comunes
Líneas Únicas
sed -n '1p' f # first line (head -1)
sed '$!d' f # last line (tail -1)
sed '/^$/d' f # remove blank lines
sed 's/^[ \t]*//' f # strip leading whitespace
sed '=' f | sed 'N;s/\n/\t/' f # number lines
Recetas
| Double-space | sed G — agregar línea en blanco después de cada línea |
| Remove HTML tags | sed 's/<[^>]*>//g' |
| Extract emails | sed -nE 's/.*([a-z]+@[a-z.]+).*/\1/p' |
| Comment lines | sed 's/^/# /' — prefijar cada línea con # |
| Trim blank lines at EOF | sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' |
| Replace nth line | sed 'Nc\new text' — reemplazar línea N |