Editar un archivo de configuración o actualizar un documento extenso repasando cada línea manualmente puede llevar mucho tiempo. Sin embargo, con herramientas de línea de comandos como sed, awk, Vim y otras, puede hacer que el proceso de buscar y reemplazar sea rápido y eficiente.
Utiliza el comando sed
¿Quieres reemplazar texto rápidamente? Utilice el comando sed . Con sed, puedes buscar y modificar texto dentro de archivos, manejando todo desde simples sustituciones hasta complejas manipulaciones de texto.
Supongamos que tienes un archivo llamado ejemplo.txt que contiene la palabra «Linux» y decides sustituirla por «Windows». Para ello, ejecute
sed 's/Linux/Windows/g' ejemplo.txt
Aquí, la bandera s significa sustituir, y la bandera g permite a sed sustituir todas las ocurrencias del patrón en cada línea.
El comando anterior no modifica directamente el archivo original; sólo muestra la salida modificada en la terminal. Sin embargo, si desea manipular el archivo original directamente, utilice la bandera -i:
sed -i 's/Linux/Windows/g' ejemplo.txt
El indicador -i realiza los cambios directamente en el archivo en lugar de mostrar sólo la salida.
¿Desea hacer una copia de seguridad del archivo antes de realizar los cambios? Añada una extensión a la opción -i:
sed -i.bak 's/Linux/Windows/g' ejemplo.txt
Esto crea un archivo de copia de seguridad llamado ejemplo.txt.bak antes de realizar cualquier cambio.
Pero, ¿y si quieres que tu archivo original permanezca inalterado? Puede crear un nuevo archivo y guardar allí la salida modificada utilizando el operador de redirección.
Por ejemplo, para enviar la salida a un archivo separado, utilice:
sed 's/Linux/Windows/g' ejemplo.txt > file.txt
El uso de patrones regex complejos con sed le permite controlar qué reemplazar en archivos grandes con contenido repetitivo. Para reemplazar varias instancias con un solo comando, ejecute:
sed -i 's/Linux\|Ubuntu/Windows/g' ejemplo.txt
Un truco que utilizo a menudo con sed es cambiar a un delimitador diferente si mis cadenas de búsqueda o sustitución contienen barras inclinadas. Por ejemplo, cuando trabajo con rutas de archivos, me gusta utilizar el símbolo @ como delimitador:
sed 's@old/path@new/path@g' archivo.txt
Esto hace que el comando sea más fácil de leer y evita la necesidad de muchos caracteres de escape.
Reemplazar texto usando el comando awk
Al igual que sed, awk también realiza manipulaciones de texto de simples a avanzadas. A menudo utilizo awk para manejar datos estructurados, especialmente con archivos CSV, donde pueden ser necesarios cálculos sobre campos seleccionados.
Aunque awk es bien conocido para manejar datos estructurados, también es eficaz para tareas rápidas de buscar y reemplazar. Por ejemplo, para reemplazar texto específico en un archivo, puedes usar:
awk '{gsub(/Windows/, "Linux"); print}' archivo.txt > nuevo_archivo.txt
Aquí, la función gsub realiza una sustitución global, reemplazando cada aparición de «Windows» por «Linux» en cada línea del archivo. Como awk no modifica los archivos directamente, redirigimos la salida a archivo_nuevo.txt para capturar los cambios.
También utilizo awk para limpiar las exportaciones de datos, especialmente de hojas de cálculo, donde el formato adicional puede complicar el procesamiento de datos. Muchas exportaciones de hojas de cálculo incluyen comillas alrededor de los valores, lo que puede interrumpir el procesamiento de datos en otras aplicaciones.
Puede eliminar todas las comillas dobles de la primera columna de un archivo CSV con este comando:
awk -F, '{gsub(/"/, "", $1); print}' datos.csv > datos_limpios.csv
Aquí, gsub elimina todas las comillas dobles sólo de la primera columna, y la salida se redirige a cleaned_data.csv para su uso posterior.
Sustituir texto con el modo Ex de Vim
¿Desea realizar transformaciones rápidas de texto sin abrir el editor completo? Pruebe Vim (Vi Mejorado), un editor de texto con un modo Ex que le permite realizar operaciones de buscar y reemplazar directamente desde la línea de comandos.
Para empezar, abra su archivo con Vim:
vim archivo.txt
A continuación, entra en modo Ex pulsando Esc, y luego utiliza la tecla (:). Esto te mostrará dos puntos (:) en la parte inferior del terminal, indicando que estás en modo Ex. Para buscar y reemplazar texto, utilice este comando:
:%s/macOS/Linux/g
Este comando sustituye todas las apariciones de «macOS» por «Linux» en todo el archivo. El símbolo % especifica que el comando debe aplicarse a todo el archivo, y la bandera g al final asegura que todas las apariciones en cada línea sean reemplazadas, no sólo la primera.
Para reemplazar sólo la primera ocurrencia en cada línea, simplemente omita la bandera g:
:%s/macOS/Linux/
¿Necesita sustituir texto dentro de un intervalo específico de líneas? Especifique el intervalo de líneas. Por ejemplo, para sustituir texto de la línea 3 a la 10:
:3,10s/macOS/Linux/g
Uno de los hábitos que sigo cuando realizo cambios en los archivos es confirmar cada sustitución. Este método permite editar con cuidado, línea por línea.
Para obtener un aviso para cada sustitución, añada c al final del comando:
:%s/macOS/Linux/gc
Uso del script Bash
A veces, es posible que necesite realizar una serie de operaciones de buscar y reemplazar en varios archivos o directorios. Para estos casos, el uso de scripts Bash puede automatizar las tareas que llevaría mucho tiempo realizar manualmente.
Consideremos un simple script que reemplaza una cadena antigua por una nueva en múltiples archivos de texto dentro del directorio actual:
#!/bin/bash
for file in *.txt; do
sed -i 's/Windows/Linux/g' "$file"
done
Para utilizar esta secuencia de comandos, primero guárdela en un archivo (por ejemplo, bashexample.sh) y, a continuación, ejecute el archivo:
chmod +x ejemplobash.sh
A continuación, ejecuta el script con:
./ejemplobash.sh
El bucle for recorre todos los archivos de texto del directorio actual y utiliza sed para reemplazar el texto de cada archivo. También puede modificar este script para manejar diferentes patrones o tipos de archivos según sea necesario.
Reemplazar texto con un script de Python
Con las capacidades avanzadas de procesamiento de texto de Python, puede realizar tareas de buscar y reemplazar archivos directamente desde la terminal. Los scripts de Python son útiles cuando desea realizar operaciones más complejas, como manejar múltiples archivos con lógica condicional.
Primero, crea un nuevo archivo Python. Puedes utilizar cualquier editor de texto, como nano o Vim:
vim archivotexto.py
A continuación, añade el siguiente script Python al archivo:
#!/usr/bin/env python
import sys
with open(sys.argv[1], 'r+') as f:
content = f.read().replace('Windows', 'Linux')
f.seek(0)
f.write(content)
f.truncate()
Después de guardar el archivo, hazlo ejecutable ejecutándolo:
chmod +x ./archivotexto.py
A continuación, ejecuta el script pasando el archivo de destino como argumento de la línea de comandos:
python3 ./archivotexto.py input.txt
Este script lee el contenido de input.txt, reemplaza las ocurrencias del texto antiguo por el texto nuevo y guarda los cambios directamente en el archivo.
Reemplazar un conjunto de caracteres con el comando tr
¿Alguna vez ha necesitado reemplazar un solo carácter por otro en todo el archivo? Si es así, entonces necesita probar el comando tr . Este comando es perfecto para reemplazar o eliminar caracteres.
Por ejemplo, a menudo lo utilizo para convertir caracteres específicos de un archivo de texto a mayúsculas o minúsculas. Para reemplazar todas las a’s y d’s minúsculas por A’s y D’s mayúsculas en un archivo de texto, ejecute:
tr 'a,d' 'A,D' < ejemplo.txt
Recuerda que tr funciona con caracteres y no con cadenas o palabras, por lo que es más adecuado para sustituir caracteres simples que para patrones más complejos.
También puedes limpiar los espacios en blanco o estandarizar los finales de línea ejecutando esto:
cat archivo_desordenado.txt | tr '\r' '\n' > archivo_limpio.txt
Convierte los finales de línea al estilo Windows (\r\n) en finales de línea al estilo Unix (\n), lo que resulta útil cuando se trabaja con archivos en distintos sistemas operativos.
Uso de Perl
Perl, un lenguaje de programación de alto nivel, también puede utilizarse directamente en el terminal para buscar y reemplazar texto, lo que lo convierte en una gran alternativa a sed. Su sintaxis es similar a la de sed, pero ofrece funciones más avanzadas.
Personalmente, me gustó mucho Perl por sus capacidades particularmente potentes de expresión regular, que lo convierten en una gran elección para operaciones complejas de buscar y reemplazar.
Puedes reemplazar cualquier palabra de un archivo con este comando:
perl -pi -e 's/Linux/Windows/g' archivo.txt
Aquí, la opción -pi indica a perl que edites el archivo en su lugar, y la opción -e le permite pasar una expresión directamente. Este comando modifica archivo.txt sustituyendo «Linux» por «Windows» en todo el archivo.
Para sustituciones sencillas, las herramientas de línea de comandos como sed, awk o perl funcionan bien. Elije un script de Bash o Python si necesitas realizar una sustitución más compleja en varios archivos o con lógica adicional.