Agregando e insertando líneas en archivos
Para insertar contenido después de una línea específica, se usa el comando a de sed. Por ejemplo, dado un archivo datos.txt con el contenido:
$ cat datos.txt
Redes - Administración de redes
Bases de Datos - SQL, MongoDB, etc.
Seguridad - Firewall, Cifrado, etc.
Sitios Web - Diseño y Desarrollo
Agregar una línea después de la tercera línea:
$ sed '3a\
> Sistemas Operativos - Linux, Unix, etc.' datos.txt
Redes - Administración de redes
Bases de Datos - SQL, MongoDB, etc.
Seguridad - Firewall, Cifrado, etc.
Sistemas Operativos - Linux, Unix, etc.
Sitios Web - Diseño y Desarrollo
Insertar una línea después de una coincidencia de patrón:
$ sed '/Bases/a\
Sistemas Operativos - Linux, Unix, etc.' datos.txt
Redes - Administración de redes
Bases de Datos - SQL, MongoDB, etc.
Sistemas Operativos - Linux, Unix, etc.
Seguridad - Firewall, Cifrado, etc.
Sitios Web - Diseño y Desarrollo
Agregar múltiples líneas al final del archivo:
$ sed '$a\
Sistemas Operativos - Linux, Unix, etc.\
Almacenamiento - NAS, SAN, etc.' datos.txt
Redes - Administración de redes
Bases de Datos - SQL, MongoDB, etc.
Seguridad - Firewall, Cifrado, etc.
Sitios Web - Diseño y Desarrollo
Sistemas Operativos - Linux, Unix, etc.
Almacenamiento - NAS, SAN, etc.
Insertar una línea antes de una posición específica usando i:
$ sed '3i\
> Sistemas Operativos - Linux, Unix, etc.' datos.txt
Redes - Administración de redes
Bases de Datos - SQL, MongoDB, etc.
Sistemas Operativos - Linux, Unix, etc.
Seguridad - Firewall, Cifrado, etc.
Sitios Web - Diseño y Desarrollo
Insertar múltiples líneas antes de una coincidencia de patrón:
$ sed '/Seguridad/i\
> Sistemas Operativos - Linux, Unix, etc.\
> Almacenamiento - NAS, SAN, etc.' datos.txt
Redes - Administración de redes
Bases de Datos - SQL, MongoDB, etc.
Sistemas Operativos - Linux, Unix, etc.
Almacenamiento - NAS, SAN, etc.
Seguridad - Firewall, Cifrado, etc.
Sitios Web - Diseño y Desarrollo
Insertar una línea antes de la última línea del archivo:
$ sed '$i\
> Sistemas Operativos - Linux, Unix, etc.' datos.txt
Redes - Administración de redes
Bases de Datos - SQL, MongoDB, etc.
Seguridad - Firewall, Cifrado, etc.
Sistemas Operativos - Linux, Unix, etc.
Sitios Web - Diseño y Desarrollo
Modificando líneas en archivos
El comando c permite reemplazar líneas completas. Para cambiar la primera línea:
$ sed '1c<linea modificada="">' datos.txt
<linea modificada="">
Bases de Datos - SQL, MongoDB, etc.
Seguridad - Firewall, Cifrado, etc.
Sitios Web - Diseño y Desarrollo</linea></linea>
Cambiar una línea que coincida con un patrón:
$ sed '/Sitios/c<contenido actualizado="">' datos.txt
Redes - Administración de redes
Bases de Datos - SQL, MongoDB, etc.
Seguridad - Firewall, Cifrado, etc.
<contenido actualizado=""></contenido></contenido>
Modificar la última línea del archivo:
$ sed '$c<ultima cambiada="" linea="">' datos.txt
Redes - Administración de redes
Bases de Datos - SQL, MongoDB, etc.
Seguridad - Firewall, Cifrado, etc.
<ultima cambiada="" linea=""></ultima></ultima>
Eliminando líneas de archivos
Usando un archivo con números de línea registros.txt:
$ cat registros.txt
1. Red - Conectividad
2. Base - MySQL, PostgreSQL
3. Seguridad - Cifrado, Autenticación
4. Web - HTML, CSS, JavaScript
Eliminar una línea específica:
$ sed '4d' registros.txt
1. Red - Conectividad
2. Base - MySQL, PostgreSQL
3. Seguridad - Cifrado, Autenticación
Eliminar líneas en intervalos, empezando desde la primera línea cada dos líneas:
$ sed '1~2d' registros.txt
2. Base - MySQL, PostgreSQL
4. Web - HTML, CSS, JavaScript
Eliminar un rango de líneas:
$ sed '3,4d' registros.txt
1. Red - Conectividad
2. Base - MySQL, PostgreSQL
Eliminar líneas fuera de un rango específico:
$ sed '3,4!d' registros.txt
3. Seguridad - Cifrado, Autenticación
4. Web - HTML, CSS, JavaScript
Eliminar la última línea:
$ sed '$d' registros.txt
1. Red - Conectividad
2. Base - MySQL, PostgreSQL
3. Seguridad - Cifrado, Autenticación
Eliminar líneas que coincidan con un patrón:
$ sed '/Red/d' registros.txt
2. Base - MySQL, PostgreSQL
3. Seguridad - Cifrado, Autenticación
4. Web - HTML, CSS, JavaScript
Eliminar desde una coincidencia hasta el final:
$ sed '/Seguridad/,$d' registros.txt
1. Red - Conectividad
2. Base - MySQL, PostgreSQL
Eliminar una coincidencia y las siguientes n líneas:
$ sed '/Base/,+1d' registros.txt
1. Red - Conectividad
4. Web - HTML, CSS, JavaScript
Eliminar líneas vacías:
$ sed '/^$/d' registros.txt
1. Red - Conectividad
2. Base - MySQL, PostgreSQL
3. Seguridad - Cifrado, Autenticación
4. Web - HTML, CSS, JavaScript
Eliminar líneas que no coincidan con un patrón:
$ sed '/Base\|Seguridad/!d' registros.txt
2. Base - MySQL, PostgreSQL
3. Seguridad - Cifrado, Autenticación
Eliminar dentro de un rango líneas que coincidan con un patrón:
$ sed '1,2{/etc\./d}' registros.txt
1. Red - Conectividad
3. Seguridad - Cifrado, Autenticación
4. Web - HTML, CSS, JavaScript
Sustituyendo contenido en archivos
Usando un archivo categorias.txt:
$ cat categorias.txt
1. Red: Router, Switch, Wireless, Protocolos
2. Seguridad: Cifrado, Antivirus, Firewall, IDS
3. Servidor: Blade, Miniordenador, Mainframe, HPC
4. Base: SQL, MySQL, Oracle, MongoDB
5. Sistema: Linux, Unix, Windows
# Clase adicional
Sustituir la primera ocurrencia en una línea:
$ sed 's/Seguridad/Protección/' categorias.txt
1. Red: Router, Switch, Wireless, Protocolos
2. Protección: Cifrado, Antivirus, Firewall, IDS
3. Servidor: Blade, Miniordenador, Mainframe, HPC
4. Base: SQL, MySQL, Oracle, MongoDB
5. Sistema: Linux, Unix, Windows
# Clase adicional
Sustituir todas las ocurrencias en una línea:
$ sed 's/Seguridad/Protección/g' categorias.txt
1. Red: Router, Switch, Wireless, Protocolos
2. Protección: Cifrado, Antivirus, Firewall, IDS
3. Servidor: Blade, Miniordenador, Mainframe, HPC
4. Base: SQL, MySQL, Oracle, MongoDB
5. Sistema: Linux, Unix, Windows
# Clase adicional
Sustituir la n-ésima ocurrencia en una línea:
$ sed 's/Seguridad/Protección/3' categorias.txt
1. Red: Router, Switch, Wireless, Protocolos
2. Seguridad: Cifrado, Antivirus, Firewall, Protección
3. Servidor: Blade, Miniordenador, Mainframe, HPC
4. Base: SQL, MySQL, Oracle, MongoDB
5. Sistema: Linux, Unix, Windows
# Clase adicional
Escribir líneas modificadas en un archivo separado y mostrarlas:
$ sed -n 's/Base/DB/gpw salida.txt' categorias.txt
4. DB: SQL, MySQL, Oracle, MongoDB
$ cat salida.txt
4. DB: SQL, MySQL, Oracle, MongoDB
Aplicar sustitución solo en líneas que coincidan con un patrón:
$ sed '/:/s/,.*//g' categorias.txt
1. Red: Router
2. Seguridad: Cifrado
3. Servidor: Blade
4. Base: SQL
5. Sistema: Linux
# Clase adicional
Eliminar los últimos n caracteres de cada línea:
$ sed 's/..$//g' categorias.txt
1. Red: Router, Switch, Wireless, Protocol
2. Seguridad: Cifrado, Antivirus, Firewall, I
3. Servidor: Blade, Miniordenador, Mainframe, H
4. Base: SQL, MySQL, Oracle, MongoD
5. Sistema: Linux, Unix, Windo
# Clase adicional
Eliminar líneas de comentarios (inician con #) y manejar líneas vacías:
$ sed 's/^#.*//;/^$/d' categorias.txt
1. Red: Router, Switch, Wireless, Protocolos
2. Seguridad: Cifrado, Antivirus, Firewall, IDS
3. Servidor: Blade, Miniordenador, Mainframe, HPC
4. Base: SQL, MySQL, Oracle, MongoDB
5. Sistema: Linux, Unix, Windows
Usar el carácter & para referenciar la coincidencia:
$ sed 's/^[0-9]\./(&)/' categorias.txt
(1.) Red: Router, Switch, Wireless, Protocolos
(2.) Seguridad: Cifrado, Antivirus, Firewall, IDS
(3.) Servidor: Blade, Miniordenador, Mainframe, HPC
(4.) Base: SQL, MySQL, Oracle, MongoDB
(5.) Sistema: Linux, Unix, Windows
# Clase adicional
Imprimiendo líneas de archivos
Para imprimir líneas específicas sin alterar el archivo, se usa el comando p con la opción -n. Ejemplo con categorias.txt:
Imprimir una línea específica:
$ sed -n '4p' categorias.txt
4. Base: SQL, MySQL, Oracle, MongoDB
Imprimir líneas en intervalos:
$ sed -n '1~2p' categorias.txt
1. Red: Router, Switch, Wireless, Protocolos
3. Servidor: Blade, Miniordenador, Mainframe, HPC
5. Sistema: Linux, Unix, Windows
Imprimir la última línea:
$ sed -n '$p' categorias.txt
# Clase adicional
Imprimir un rango de líneas:
$ sed -n '2,4p' categorias.txt
2. Seguridad: Cifrado, Antivirus, Firewall, IDS
3. Servidor: Blade, Miniordenador, Mainframe, HPC
4. Base: SQL, MySQL, Oracle, MongoDB
Imprimir desde una línea hasta el final:
$ sed -n '3,$p' categorias.txt
3. Servidor: Blade, Miniordenador, Mainframe, HPC
4. Base: SQL, MySQL, Oracle, MongoDB
5. Sistema: Linux, Unix, Windows
# Clase adicional
Imprimir líneas que coincidan con un patrón:
$ sed -n '/Red/p' categorias.txt
1. Red: Router, Switch, Wireless, Protocolos
Imprimir desde una coincidencia hasta una línea específica:
$ sed -n '/Servidor/,4p' categorias.txt
3. Servidor: Blade, Miniordenador, Mainframe, HPC
4. Base: SQL, MySQL, Oracle, MongoDB
Imprimir desde una línea hasta una coincidencia de patrón:
$ sed -n '1,/Seguridad/p' categorias.txt
1. Red: Router, Switch, Wireless, Protocolos
2. Seguridad: Cifrado, Antivirus, Firewall, IDS
Imprimir desde una coincidencia hasta el final:
$ sed -n '/Base/,$p' categorias.txt
4. Base: SQL, MySQL, Oracle, MongoDB
5. Sistema: Linux, Unix, Windows
# Clase adicional
Imprimir una coincidencia y las siguientes n líneas:
$ sed -n '/Red/,+1p' categorias.txt
1. Red: Router, Switch, Wireless, Protocolos
2. Seguridad: Cifrado, Antivirus, Firewall, IDS
Imprimir entre dos patrones:
$ sed -n '/Seguridad/,/DB/p' categorias.txt
2. Seguridad: Cifrado, Antivirus, Firewall, IDS
3. Servidor: Blade, Miniordenador, Mainframe, HPC
4. Base: SQL, MySQL, Oracle, MongoDB
Imprimiendo números de línea
Para contar el total de líneas en un archivo:
$ sed -n '$=' categorias.txt
6
Imprimir números de línea junto con líneas que coincidan con un patrón, por ejemplo, errores en logs:
$ sed -n '/Error/{=;p}' /var/log/mensajes
Leyendo y escribiendo en archivos
Usendo dos archivos: registros.txt y categorias.txt como se definieron anteriormente.
Leer el contenido de un archivo después de cada línea de otro:
$ sed 'r registros.txt' categorias.txt
1. Red: Router, Switch, Wireless, Protocolos
1. Red - Conectividad
2. Base - MySQL, PostgreSQL
3. Seguridad - Cifrado, Autenticación
4. Web - HTML, CSS, JavaScript
2. Seguridad: Cifrado, Antivirus, Firewall, IDS
...
Leer un archivo después de una línea específica:
$ sed '3r registros.txt' categorias.txt
1. Red: Router, Switch, Wireless, Protocolos
2. Seguridad: Cifrado, Antivirus, Firewall, IDS
3. Servidor: Blade, Miniordenador, Mainframe, HPC
1. Red - Conectividad
2. Base - MySQL, PostgreSQL
3. Seguridad - Cifrado, Autenticación
4. Web - HTML, CSS, JavaScript
4. Base: SQL, MySQL, Oracle, MongoDB
5. Sistema: Linux, Unix, Windows
# Clase adicional
Leer un archivo después de una coincidencia de patrón:
$ sed '/Servidor/r registros.txt' categorias.txt
1. Red: Router, Switch, Wireless, Protocolos
2. Seguridad: Cifrado, Antivirus, Firewall, IDS
3. Servidor: Blade, Miniordenador, Mainframe, HPC
1. Red - Conectividad
2. Base - MySQL, PostgreSQL
3. Seguridad - Cifrado, Autenticación
4. Web - HTML, CSS, JavaScript
4. Base: SQL, MySQL, Oracle, MongoDB
...
Leer un archivo al final:
$ sed '$r registros.txt' categorias.txt
1. Red: Router, Switch, Wireless, Protocolos
2. Seguridad: Cifrado, Antivirus, Firewall, IDS
3. Servidor: Blade, Miniordenador, Mainframe, HPC
4. Base: SQL, MySQL, Oracle, MongoDB
5. Sistema: Linux, Unix, Windows
# Clase adicional
1. Red - Conectividad
2. Base - MySQL, PostgreSQL
3. Seguridad - Cifrado, Autenticación
4. Web - HTML, CSS, JavaScript
Escribir una línea específica a otro archivo:
$ sed -n '1w resultado.txt' categorias.txt
$ cat resultado.txt
1. Red: Router, Switch, Wireless, Protocolos
Escribir múltiples líneas a otro archivo:
$ sed -n -e '1w resultado.txt' -e '$w resultado.txt' categorias.txt
$ cat resultado.txt
1. Red: Router, Switch, Wireless, Protocolos
# Clase adicional
Escribir líneas que coincidan con patrones a otro archivo:
$ sed -n '/Red\|Seguridad/w resultado.txt' categorias.txt
$ cat resultado.txt
1. Red: Router, Switch, Wireless, Protocolos
2. Seguridad: Cifrado, Antivirus, Firewall, IDS
Escribir desde una coincidencia hasta el final a otro archivo:
$ sed -n '/Servidor/,$w resultado.txt' categorias.txt
$ cat resultado.txt
3. Servidor: Blade, Miniordenador, Mainframe, HPC
4. Base: SQL, MySQL, Oracle, MongoDB
5. Sistema: Linux, Unix, Windows
# Clase adicional
Escribir una coincidencia y las siguientes n líneas a otro archivo:
$ sed -n '/Servidor/,+3w resultado.txt' categorias.txt
$ cat resultado.txt
3. Servidor: Blade, Miniordenador, Mainframe, HPC
4. Base: SQL, MySQL, Oracle, MongoDB
5. Sistema: Linux, Unix, Windows
# Clase adicional