GNU/Linux >> Tutoriales Linux >  >> Linux

Sustitución de cadena en Bash

Bash es un proceso de comando compatible con shell de UNIX cuya tarea principal es manipular cadenas realizadas en un entorno de shell. En ocasiones, se pide a los programadores que trabajen en diferentes archivos. Pueden agregar, eliminar y reemplazar partes o el archivo completo para adaptarlo a su trabajo. Esto requiere el conocimiento de reemplazar cadenas en bash. El almacenamiento de datos puede ser temporal o permanente, dependiendo de la naturaleza de los datos. La cadena de archivo es esencial cuando se reemplaza el contenido del archivo.

Reemplazo de cadena en Bash

sed es vital y resulta útil para ayudar a reemplazar cadenas en un archivo con scripts bash. El editor de cadenas se puede usar de diferentes maneras para reemplazar el contenido del archivo en bash. Un editor de cadenas alternativo pero con sonido es awk que se puede poner en juego al reemplazar el valor de cadena de un archivo usando bash. Este artículo mostrará con la ayuda de ejemplos cómo se puede reemplazar el contenido del archivo en bash. Tenga en cuenta que el conocimiento de los patrones de expresiones regulares también puede ser de gran valor al reemplazar una cadena en bash.

Manipulación de cadenas Bash

Al realizar reemplazos menores o simples, no se requiere el sed. Bash puede hacer la manipulación.

Por ejemplo:
Al reemplazar un fosslinux.gif con .mp4, no se requiere sed.
Para ejecutar el proceso usando bash, use el texto codificado a continuación:

#/bin/bash
file_name="fosslinux.gif"
new_extension="mp4"

# Replace .gif with .mp4
generated_file_name=${file_name/.gif/.$new_extension}

echo $generated_file_name

Reemplazo de cadena usando sed

sed puede denominarse editor de secuencias. Sed puede reemplazar una cadena en archivos. Veamos un ejemplo de un archivo llamado singleboardbytes.txt que tiene la siguiente información:
Foss Linux es un excelente sitio de aprendizaje para cualquier usuario de Linux. Consulte los artículos publicados por Foss Linux en su sitio.

Ahora desde nuestro archivo, necesitamos reemplazar la palabra “sitio ” con “sitio web ” y cambie el nombre del archivo a fosslinux.txt .

Comprender la sintaxis sed

sed -i 's/search_string/replace_string/' filename
sed – is the command used in the execution of the above syntax
‘-i’ – used in the modification of contents in the original file with a replacement string aid whenever the search value exists in the file.
‘s’ – this is the substitute command
‘search_string’ – this represents the string value that is to be searched for replacement in the original file
‘replace_string’ – this represents the string value that is used to replace the searched value. The string should match the string found by the ‘search_string’ command.
‘filename’ – this is the filename whereby the replacement will be applied.

Ejecute el siguiente comando en su terminal:

sed 's/site/website/g' singleboardbytes.txt > fosslinux.txt

Nota:también puede ejecutar el comando anterior poniéndolo como un script bash.
Reemplazar usando -i comando

Después de ejecutar el comando, el siguiente paso es reemplazar usando -i dominio. -i es una representación de "en su lugar", lo que significa que el archivo solo se reemplaza y no se crean archivos adicionales. Usando nuestro ejemplo anterior, ejecute el siguiente comando:

sed -i 's/site/website/g' singleboardbytes.txt

En la figura a continuación, puede ver un signo de exclamación que dice:El archivo "/home/tuts/singleboardbytes.txt cambió en el disco". esto muestra que los cambios se han realizado con éxito.

La siguiente figura es el archivo que contiene los cambios realizados en el paso anterior, tanto en el nombre del archivo (singleboardbytes.txt a fosslinux.txt) como en la palabra site se ha cambiado al sitio web .

Uso de una variable como valores de búsqueda y reemplazos

Con un poco de interpolación, las variables se pueden usar para reemplazar cadenas. El primer argumento sed, en este caso, tiene que usar comillas dobles en lugar de comillas simples. Por ejemplo, su código será similar al siguiente:

tuts() {
local search=$1
local replace=$2

# Note the double quotes
sed -i "s/${search}/${replace}/g" singleboardbytes.txt
}

sed tiene dos sabores, a saber:el FreeBSD y el linux sed . Las distribuciones de Linux usan el sed de Linux, mientras que los usuarios de OS X usan el sed de FreeBSD. Estos tipos son bastante diferentes y, por lo tanto, no se pueden transferir comandos de un tipo sed a otro.

Por ejemplo, al reemplazar el contenido del archivo con FreeBSD, se debe realizar una copia de seguridad con la extensión .bak. O puede iniciar una copia de seguridad con el uso de pares de comillas vacíos inmediatamente después de la notación -i, como se muestra en la siguiente sintaxis de bash:

tuts() {
local search=$1
local replace=$2

sed -i "" "s/${search}/${replace}/g" singleboardbytes.txt
}

Si no se realiza una copia de seguridad mientras usa FreeBSD como se ilustra en el código de sintaxis anterior, caerá en un error como el que se muestra a continuación:

sed: 1: "/Users/user/path/tuts ...": extra characters at the end of h command

Cómo reemplazar un archivo y hacer coincidir el patrón de dígitos usando el comando sed

Si ejecuta correctamente el script, se realizará una búsqueda de todo el contenido numérico presente en un archivo. Luego, el contenido se reemplazará agregando $ antes de los números.

#!/bin/bash
# Check the command line argument value exists or not
if [ $1 != "" ]; then
# Search all string containing digits and add $
sed -i 's/\b[0-9]\{5\}\b/$&/g' $1
fi

Reemplazar una cadena usando el comando awk

En este caso, usaremos el comando awk en lugar del comando sed para reemplazar el contenido de un archivo. La diferencia entre estos comandos es que el comando sed actualiza directamente el archivo original, lo que no ocurre con el comando awk.

#!/bin/bash
# Check the command line argument value exists or not
if [ $1 != "" ]; then
# Search all string based on date
awk '{sub("02/06/2020","12/06/2020")}1' $1 > temp.txt && mv temp.txt $1
fi

Conclusión

Los ejemplos anteriores son vitales para su progreso en el aprendizaje de cómo reemplazar una cadena en Bash. Por lo tanto, para ser bueno en eso, tendrás que practicar regularmente. Buscar y reemplazar una cadena en un archivo puede parecer complejo, pero lo encontrará mucho más manejable si sigue nuestras pautas correctamente.

Un punto a tener en cuenta es que ejecutar los comandos a veces puede parecer más manejable, pero debe tener cuidado de no causar estragos en sed. Cuando ingresa los comandos incorrectos, dañará su computadora y le causará más problemas, como la pérdida de datos. Por lo tanto, para estar seguro, siempre copie y pegue el código tal como está en su terminal. Esto evitará errores ortográficos que podrían dañar su máquina. Esperamos que este artículo te haya ayudado a aprender cómo reemplazar una cadena en bash usando este artículo.


Linux
  1. ¿Cómo reemplazar una cadena en un archivo (s)?

  2. En Bash, ¿cómo agrego una cadena después de cada línea en un archivo?

  3. ¿Cómo puedo agregar una cadena al comienzo de cada archivo en una carpeta en bash?

  4. Eliminar ocurrencias de cadena en archivo de texto

  5. linux bash, cadena camel case para separar por guión

Bash:Agregar al archivo

35 ejemplos de secuencias de comandos Bash

Bash Scripting – Manipulación de cadenas

Script Bash (III)

Reemplazo de una subcadena con otra cadena en Bash

Cómo usar Sed para buscar y reemplazar una cadena en un archivo