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
-nSuprimir impresión automática; imprimir solo con p
-e 'cmd'Ejecutar un comando sed (encadenar con múltiples -e)
-f script.sedLeer comandos desde un archivo
-i[suffix]Editar archivo en sitio (sufijo de respaldo opcional)
-E / -rUsar 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
gReemplazar todas las ocurrencias en la línea
N (number)Reemplazar solo la N-ésima ocurrencia
pImprimir línea si se realizó la sustitución
w fileEscribir las líneas sustituidas en un archivo
i / ICoincidencia 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
NNúmero de línea N
$Última línea
N,MRango 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~stepDesde 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
dEliminar espacio de patrón, iniciar siguiente ciclo
DEliminar hasta el primer salto de línea en el espacio
pImprimir el espacio de patrón
PImprimir hasta el primer salto de línea en el espacio
qSalir después de imprimir el espacio de patrón actual
QSalir 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\textInsertar texto antes de la línea actual
a\textAgregar texto después de la línea actual
c\textReemplazar la línea actual con texto
r fileLeer y agregar el contenido del archivo
R fileLeer y agregar una línea del archivo (GNU)
w fileEscribir el espacio de patrón en el archivo
Espacio de Retención
Comandos del Espacio de Retención
hCopiar el espacio de patrón al espacio de retención
HAgregar el espacio de patrón al espacio de retención
gCopiar el espacio de retención al espacio de patrón
GAgregar el espacio de retención al espacio de patrón
xIntercambiar 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
:labelDefinir una etiqueta de rama
b labelSaltar (ir) a la etiqueta
t labelSaltar si el último s/// tuvo éxito
T labelSaltar 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 -iEl sufijo es opcional; -i solo edita sin respaldo
BSD/macOS sed -iRequiere argumento de sufijo; usar -i '' sin respaldo
-i.bakCrea archivo de respaldo con extensión .bak
Multiple filessed -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, \2Referencia 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-spacesed G — agregar línea en blanco después de cada línea
Remove HTML tagssed 's/<[^>]*>//g'
Extract emailssed -nE 's/.*([a-z]+@[a-z.]+).*/\1/p'
Comment linessed 's/^/# /' — prefijar cada línea con #
Trim blank lines at EOFsed -e :a -e '/^\n*$/{$d;N;ba' -e '}'
Replace nth linesed 'Nc\new text' — reemplazar línea N