Reemplazo de cadena en Bash | FOSS Linux

Bash es un proceso de comando compatible con el 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 todo el archivo para que se adapte a su trabajo. Esto requiere el conocimiento de reemplazar cadenas en bash. El almacenamiento de datos puede ser temporal o permanente, según la naturaleza de los datos. La cadena de archivo es esencial al reemplazar el contenido del archivo.

Índice

Reemplazo de cadena en Bash

sed es vital y es útil para ayudar a reemplazar cadenas en un archivo con scripts bash. El editor de cadenas se puede utilizar de diferentes formas para reemplazar el contenido del archivo en bash. Un editor de cadenas alternativo pero de sonido es awk, que se puede poner en juego cuando se reemplaza el valor de la 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 cadenas en bash.

Manipulación Bash String

Cuando se realizan reemplazos menores o simples, no se requiere sed. Bash puede hacer la manipulación.

Por ejemplo:
Al reemplazar un fosslinux.gif con .mp4, sed no es necesario.
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 flujo. 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, de nuestro archivo, debemos reemplazar la palabra "sitio" con "sitio web”Y cambie el nombre del archivo a fosslinux.txt.

Entendiendo 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

Reemplazo de cuerdas usando sed
Reemplazo de cuerdas usando sed

Nota: también puede ejecutar el comando anterior colocándolo como un script bash.
Reemplazo usando el -I mando

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

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

Reemplazo usando el comando -i
Reemplazo usando el comando -i

En la siguiente figura, 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 correctamente.

Cambios realizados en singleboardbytes.txt
Cambios realizados en singleboardbytes.txt

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 sitio ha sido cambiado a sitio web.

Cambio final después de ejecutar el comando sed
Cambio final después de ejecutar el comando sed

Usar 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, debe 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
}

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

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

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

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

Reemplazo de 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 es el caso del 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 con regularidad. Buscar y reemplazar cadenas 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, romperá su computadora, causando 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 de ortografía que puedan dañar su máquina. Esperamos que este artículo le haya ayudado a aprender cómo reemplazar una cadena en bash usando este artículo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir