Sed en Linux: Editar, Reemplazar y Transformar Texto
El comando sed en Linux es un editor de textos simple utilizado para realizar pequeñas transformaciones en el contenido de los archivos. Utiliza el patrón POSIX ERE para expresiones regulares.
El sed recibe un texto de uno o más archivos pasados como argumento en la línea de comandos y lo transforma enviando la modificación a la salida estándar STDOUT (monitor de video).
Si queremos que el sed realmente altere el contenido del archivo es necesario utilizar el redireccionador mayor-que ">" hacia otro archivo cualquiera.
Otra posibilidad es usar la opción "-iSUFIJO" que permite editar directamente el archivo original y guardar una copia de seguridad con el nombre del archivo seguido del SUFIJO indicado.
Las opciones del sed son:
- -iSUXIFO altera el archivo
- -e imprime en pantalla sin alterar el archivo
- -n suprime la salida, muestra solo el resultado del comando
- -f archivo Lee un script con expresiones del sed
Los comandos que el sed acepta son:
- s reemplaza un trecho de texto por otro
- ! invierte la lógica del comando
- ; separador de comandos
- | separador de strings
- d al final elimina
- p al final imprime
- g al final (como se usa d y p) altera todas las ocurrencias
Para reemplazar ocurrencias por otro texto, se puede utilizar la opción "s" del sed. Las barras normales "/" se usan para separar el texto a buscar y el texto nuevo. En este caso, el reemplazo se envía a la salida estándar STDOUT y el archivo permanece intacto:
$ sed "s/velho/novo/" arquivo
Para reemplazar el nombre uira por el nombre carla en el archivo /etc/passwd e imprimir en la salida estándar:
$ sed ‘s/uira/carla/’ /etc/passwd
En este ejemplo a continuación la ocurrencia /usr/local/bin es alterada para /usr/bin y grabada en textonuevo.txt sin alterar el archivo original. El uso de la barra invertida fue necesario para indicar que el caracter "'/" de la ruta no es el separador de reemplazo del sed:
$ sed ‘s/\/usr\/local\/bin/\/usr\/bin/’ texto.txt > textonovo.txt
Puedes optar por usar la opción –i, de manera que el sed alterará el archivo y mantendrá un backup del archivo original en archivo.bkp
$ sed –i.bkp ‘s/\/usr\/local\/bin/\/usr\/bin/’ arquivo
Coloca la palabra "comprar" al inicio de cada línea:
$ sed 's/^/comprar /' supermercadocomprar arrozcomprar feijão
comprar carnecomprar batatacomprar alfacecomprar tomatecomprar arroz
Imprime únicamente la tercera línea del archivo supermercado:
$ sed -n '3p' supermercado carne
Imprime desde la tercera hasta la quinta línea del archivo supermercado:
$ sed -n '3,5p' supermercado carnebatataalface
El comando "d" puede ser usado para eliminar todas las líneas que contienen la palabra carne y crear una copia:
$ sed -i.bkp '/carne/d' supermercado $ cat supermercadoarrozfeijãobatataalfacetomatearroz
Reemplaza todas las ocurrencias de arroz y batata por couve-flor:
$ sed 's/arroz\|batata/couve-flor/' supermercadocouve-florfeijãocouve-floralfacetomatecouve-flor
Elimina todas las líneas en blanco, alterando el archivo:
$ sed -i '/^$/d' arquivo.txt
Elimina todas las TAGs HTML del archivo:
$ sed 's/<[^>]*>//g' arquivo.txt
Un conjunto de expresiones del sed puede ser grabado en un archivo de texto para ser leído por él como un interpretador con la opción -f. En este caso, varios comandos del sed fueron grabados en un archivo llamado expresiones:
$ cat expressoess/carla/uira/s/<p>/<p align=center>/
$ sed -f expressoes arquivo.txt
Aprende mucho más sobre Linux en nuestro curso en línea. Puedes realizar la inscripción aquí. Si ya tienes una cuenta, o quieres crear una, simplemente ingresa o crea tu usuario aquí.
¿Te gustó? Comparte
Eso fue solo una pieza. El curso enseña el camino completo — desde tu primer comando hasta el día del examen.