Introducción
Sed significa S tren ED itor Es un comando de Linux que se utiliza para buscar, encontrar y reemplazar, o insertar y eliminar palabras y líneas en un archivo de texto.
El caso de uso más común del comando Sed es buscar y reemplazar cadenas en archivos. Al usar el comando Sed, puede editar archivos sin abrirlos.
Este artículo explicará los detalles del uso del comando Sed para buscar y reemplazar cadenas en archivos.
Todos los ejemplos de este tutorial se ejecutaron en Ubuntu 20.04.
Buscar y reemplazar
De forma predeterminada, Sed está instalado en la mayoría de las distribuciones de Linux. Puede verificar la instalación de Sed en su sistema Linux ejecutando:
$ sed --v
La salida será algo como esto:
La sintaxis básica del uso del comando Sed para buscar y reemplazar texto es:
$ sed -i 's/Search_pattern/Replacement_pattern/g' FILE
en el que:
-i:esta opción hace que el comando Sed edite los archivos en lugar de escribir la salida en la salida estándar.
s:Significa sustituto.
//:Caracteres delimitadores.
g:Es una bandera de reemplazo global.
ARCHIVO:El archivo que desea manipular con el comando Sed.
Se recomienda poner el patrón de búsqueda, el patrón de reemplazo y otros argumentos entre comillas.
Por ejemplo, aquí hay un archivo de texto que se usó para la demostración:
567 Test test test
test /bin/zsh linuxways.net testbar 789
Para reemplazar todas las palabras de 'prueba' con palabras de 'linux', ejecute el siguiente comando:
$ sed -i 's/test/linux/g' test.txt
Salida:
Si no usa el indicador g, solo se reemplaza la primera aparición del patrón de búsqueda en cada línea:
$ sed -i 's/test/linux/' test.txt
Salida:
Como puede ver, en el ejemplo anterior, también se coloca la prueba de subcadena dentro de la cadena testbar. Si no desea reemplazar una subcadena en el patrón de búsqueda, coloquemos el patrón de búsqueda entre dos límites de palabras \b:
$ sed -i 's/\btest\b/linux/g' test.txt
Salida:
Para hacer que el patrón de búsqueda coincida con mayúsculas y minúsculas, usemos el indicador I:
$ sed -i 's/test/linux/gI' test.txt
Salida:
En el mundo de Linux, encontraremos muchos casos de uso que tienen caracteres delimitadores en archivos de texto. Tenemos que usar la barra invertida \ para dividir los caracteres delimitadores. Por ejemplo, para reemplazar /bin/zsh con /usr/bin/bash, ejecute:
$ sed -i 's/\/bin\/zsh/\/usr\/bin\/bash/g' test.txt
Salida:
Buscar y reemplazar recursivamente
En muchos casos, desea buscar directorios recursivamente para archivos que tengan una cadena específica y reemplazar esa cadena en todos los archivos.
Por ejemplo, el siguiente comando buscará y reemplazará la cadena 'way' con 'road' en todos los archivos del directorio actual.
$ find . -type f -exec sed -i 's/way/road/g' {} +
Si los nombres de archivo contienen caracteres de espacio, usemos la opción -print0:
$ find . -type f -print0 | xargs -0 sed -i 's/way/road/g'
Para buscar y reemplazar una cadena solo en archivos que tienen una extensión específica, ejecute:
$ find . -type f -name "*.java" -print0 | xargs -0 sed -i 's/way/road/g'
Conclusión
Ha repasado algunos ejemplos comunes del uso del comando Sed. Buscar y reemplazar una cadena de texto en un archivo con el comando Sed no es tan complicado como imaginas.
Si tiene alguna inquietud, hágamelo saber en la sección de comentarios.