sed significa editor de flujos y es un comando de uso común en Linux/Unix. El nombre proviene de un portmanteau de esas dos palabras. No es un editor de texto, aunque sí modifica el texto. En cambio, sed recibe la entrada de texto como un «flujo» y edita el flujo de acuerdo con sus instrucciones.

En general, la gente utiliza sed como una versión de línea de comandos de encontrar y reemplazar. El comando principal del programa se utiliza para sustituir una cadena de caracteres por otra. Esto lo hace útil para ejecutar funciones de búsqueda y reemplazo en un lote de archivos, pero no es tan fácil de usar como algo del Bloc de notas o de Word. Verás que cuesta un poco acostumbrarse a la sintaxis, pero una vez que la domines, verás lo increíblemente potente que puede ser este compacto editor.

Uso de sed para la sustitución

Para usar sed, tendrás que abrir una ventana de Terminal. El comando se invoca con sed, pero escribir sólo eso no hará nada. Necesita proporcionar uno de los comandos, así como algunos parámetros.

El parámetro más común es el sustituto, o s. Un simple comando de sustitución sed se parece a lo siguiente

sed's/cat/dog/'

Ese comando ordenará a sed que explore el texto entrante y sustituya cada instancia de la cadena «gato» por «perro». Para demostrarlo, usaremos el comando echo para darle a sed algo con lo que trabajar.

echocat catapult |sed's/cat/dog/'

Hay tres partes principales en el comando sed. Primero, está el sed que inicia el programa. Luego está la s que inicia el comando de sustitución. La barra inclinada / es un separador. La cadena que sigue será la cadena que sed busca. La cadena después de la segunda barra será los caracteres de sustitución que sed escribe en el flujo. La barra final cierra el comando. Todo junto, es ‘s/texto-a-buscar/texto-a-reemplazar/’.

RELACIONADO:  ¿Debería permitirse a los fabricantes de teléfonos enviar anuncios de notificaciones push?

Observe las comillas simples en este ejemplo. Las comillas simples te permiten utilizar metacaracteres en tu comando. Aunque las comillas no son esenciales para la mayoría de nuestros ejemplos, deberías desarrollar el hábito de usar comillas para todos los comandos.

¿Qué pasa con las cadenas parciales? El comando anterior funcionará con cualquier aparición de la cadena «cat», incluso si forma parte de otra palabra. Por ejemplo, «catapulta» se convertirá en «dogapulta» como «catamarán» se convertirá en «dogamarán».

echo catapulta |sed's/gato/perro/'

Reemplazo global

En nuestro primer ejemplo puede haber notado que sólo se reemplazó la primera instancia de la cadena coincidente. Como muchas utilidades de GNU, sed se basa en líneas. Como resultado, sólo opera en la primera coincidencia dentro de una línea. Si tiene varias coincidencias para su cadena candidata en la línea, sólo se cambiará la primera. Para hacer que sed funcione en todas las apariciones de la cadena objetivo, utilice la bandera g al final del comando:

sed's/cat/dog/g'

Esto funcionaría como en el siguiente ejemplo:

echocat catapulta catamarán |sed's/cat/dog/g'

Sin la bandera global, sólo se reemplazaría la primera instancia de «cat» en cada línea.

Configuración de los archivos de entrada y salida

Por defecto, sed operará en la entrada estándar. Sin embargo, eso no es demasiado útil. Para ejecutar sed en un archivo, especifique el nombre del archivo al final del comando, así

sed's/cat/dog/g' oldfile.txt > newfile.txt

Esto ejecutará sed en «oldfile.txt» y guardará la salida del comando en «newfile.txt». Si «newfile.txt» no existe, será creado por el comando. Si no se especifica un archivo de salida, sed se hará eco del nuevo texto del archivo en la entrada estándar.

RELACIONADO:  Como hacer banco madera

Si desea sobrescribir el contenido de un archivo, deberá utilizar la bandera -i. Esta bandera hace las ediciones «en el lugar».

sed-i'''s/cat/dog' oldfile.txt

Este comando sobrescribe el contenido del archivo de destino inmediatamente, lo cual es ligeramente peligroso. Para estar seguro, puede crear una copia de seguridad in situ.

Para crear una copia de seguridad del archivo, ponga una extensión después de la -i.

No hace falta que sea una extensión funcional: «.bu» o «.bak» funcionan bien. Esto creará un archivo de copia de seguridad con una extensión.

sed -i.bak 's/cat/dog' oldfile.txt

Esto crea «oldfile.txt.bak», que contiene los datos de texto sin editar de la versión original de «oldfile.txt».

Comparación de expresiones regulares

El verdadero poder de sed proviene de la comparación de expresiones regulares. Esto le permite establecer patrones para las coincidencias, en lugar de cadenas literales. Por ejemplo, podríamos usar algo como la cadena de abajo para repetir cualquier conjunto de uno o más números:

echo "123 abc"|sed's/[0-9][0-9]*/& &/'

Más información

sed es una utilidad extremadamente poderosa con una profundidad de poder similar a la de un lenguaje de scripting. Para saber más sobre todas las posibilidades de sed, consulte la completa guía de Bruce Barnett sobre sed.