Cómo reemplazar una cadena en un archivo en Bash

Cómo reemplazar una cadena en un archivo en Bash

Como programador, es posible que deba trabajar con diferentes tipos de archivos para almacenar datos temporal o permanentemente. A veces, es posible que deba reemplazar parte del archivo o modificar el contenido particular del archivo. Para reemplazar el contenido en un archivo, debe buscar la cadena de archivo particular. El 'sed' El comando se usa para reemplazar cualquier cadena en un archivo usando un script bash. Este comando se puede usar de varias maneras para reemplazar el contenido de un archivo en Bash. El 'Awk'El comando también se puede usar para reemplazar la cadena en un archivo. Este tutorial le mostrará cómo reemplazar cualquier valor de cadena de un archivo usando un script bash.

01. Sintaxis general para SED
02. Reemplace la cadena en el archivo con script bash sed
03. comandos de sed g e I para global e insensible
04. SED DIGIT COMPAÑINACIÓN
05. Sintaxis general para AWK
06. Reemplace la cadena en el archivo con el script Bash AWK
07. Reemplace la cadena en el archivo con scripting de bash puro
08. Reemplace la cadena en el archivo con Perl One Liner

Datos de muestra para reemplazo de cadenas de bash

Un archivo de texto llamado Ventas.TXT con el siguiente contenido se crea para mostrar las operaciones de reemplazo.
Ventas.TXT

Área de monto de la fecha
01/01/2020 60000 Dhaka
10/02/2020 76000 Rajshahi
21/03/2020 54000 khulna
15/04/2020 78000 Chandpur
17/05/2020 45000 Bogra
06/06/2020 67000 Comilla

Sintaxis general para SED: Reemplace la cadena en un archivo

La sintaxis básica del 'sed'El comando para reemplazar la cadena particular en un archivo se da a continuación a continuación.

Sintaxis

Sed -i 's/search_string/reemplazar_string/' nombre de archivo

Cada parte de la sintaxis anterior se explica a continuación.

'-i' La opción se usa para modificar el contenido del archivo original con la cadena de reemplazo si la cadena de búsqueda existe en el archivo.
's' indica el comando sustituto.
'cadena de búsqueda' contiene el valor de cadena que se buscará en el archivo para reemplazar.
'reemplazar_string' contiene el valor de cadena que se usará para reemplazar el contenido del archivo que coincide con el 'cadena de búsqueda' valor.
'Nombre del archivo' contiene el nombre de archivo donde se aplicará la búsqueda y el reemplazo.

Ejemplo 1: Reemplace el archivo con el comando 'sed'

En el siguiente script, el texto de búsqueda y reemplazo se tomará del usuario. Si la cadena de búsqueda existe en 'ventas.txt ', luego será reemplazado por la cadena de reemplazo. Aquí, se realizará una búsqueda sensible al caso.

#!/bin/bash
# Asignar el nombre de archivo
FileName = "Ventas.TXT"
# Toma la cadena de búsqueda
leer -p "Ingrese la cadena de búsqueda:" Buscar
# Tome la cadena de reemplazo
leer -p "Ingrese la cadena de reemplazo:" Reemplazar
Si [[$ Search != "" && $ reemplazar != ""]]; entonces
sed -i "s/$ search/$ reemplazar/" $ nombre de archivo
FI

Producción:

Ejemplo 2: Reemplace el archivo con el comando 'sed' con el indicador 'g' y 'i'

El siguiente script funcionará como el ejemplo anterior, pero la cadena de búsqueda se buscará a nivel mundial el indicador 'G', y la búsqueda insensible a la caja se realizará para el indicador 'I'.

#!/bin/bash
# Toma la cadena de búsqueda
leer -p "Ingrese la cadena de búsqueda:" Buscar
# Tome la cadena de reemplazo
leer -p "Ingrese la cadena de reemplazo:" Reemplazar
Si [[$ Search != "" && $ reemplazar != ""]]; entonces
SED -I "S/$ Search/$ Reemplazar/GI" $ 1
FI

Producción:

Ejemplo 3: Reemplace el archivo con el comando 'sed' y el patrón de dígitos coincidentes

El siguiente script buscará todo el contenido numérico en un archivo y reemplazará el contenido agregando el ps símbolo al comienzo de los números.

#!/bin/bash
# Verifique el valor del argumento de la línea de comando existe o no
Si [$ 1 != ""]; entonces
# Buscar todas las cadenas que contienen dígitos y agregar $
Sed -i 's/\ b [0-9] \ 5 \ \ b/$ &/g' $ 1
FI

Producción:

Reemplace la cadena en un archivo con el comando 'AWK'

El 'awk ' El comando es otra forma de reemplazar la cadena en un archivo, pero este comando no puede actualizar el archivo original directamente como el 'sed ' dominio.

Ejemplo 4: Reemplace el archivo con el comando 'AWK'

El siguiente script almacenará el contenido actualizado en el temperatura.TXT archivo que será renombrado por el archivo original.

#!/bin/bash
# Verifique el valor del argumento de la línea de comando existe o no
Si [$ 1 != ""]; entonces
# Buscar todas las cadenas basadas en la fecha
AWK 'sub ("06/06/2020", "12/06/2020") imprimir' $ 1> temperatura.txt && mv temp.txt $ 1
FI

Producción:


En el ejemplo anterior, el comando 'AWK' se usa para buscar una cadena "06/06/2020", ¿Cuál es la última fecha en nuestro archivo de muestra?. La cadena emparejada será reemplazada por una nueva cadena "06/12/2020". La cadena resultante, ya sea sustituida o no, se imprime en cada línea.

Ejemplo 5: Reemplace la cadena en el archivo con scripting de bash puro

En este ejemplo haremos el mismo trabajo con una fiesta mientras que el bucle y un comando de reemplazo de cadena de bash. Escribiremos la salida a un TMP archivo y reemplace el original al final del script. Vea el código a continuación:

#!/bin/bash
Mientras lea la línea; hacer
# Reemplazar todas las instancias en línea de Khulna con Dhaka
echo $ línea // khulna/dhaka
hecho < Sales.txt > /tmp/ventas.O.TXT
MV /TMP /Ventas.O.ventas txt.TXT

Puede ver que el comando echo hará un reemplazo en la variable de línea, ya que el script lee cada línea en el archivo de texto y reemplazará todas las instancias de Khulna con la nueva cadena Dhaka. El bucle while se lee desde el archivo de entrada Ventas.TXT y escribe en el archivo de salida /tmp/ventas.O.TXT. Finalmente, el archivo de salida temporal reemplaza el archivo original con el MV dominio.

Producción:

Ejemplo 6: Reemplace la cadena en el archivo con Perl One Liner

Esta tarea es realmente súper simple con Perl. Perl es un lenguaje antiguo y menos popular pero extremadamente poderoso. Esto se puede hacer con un comando de línea en la línea de comando bash:

perl -pi.ventas de bak -e 's/dhaka/bogra/g'.TXT

-Pi.bak le dice a Perl que procese el archivo en su lugar y también cree un archivo de copia de seguridad con el .extensión de BAK. El reemplazo será todos los casos de Dhaka para Bogra Como el nuevo texto. Aquí puede ver la salida fácil de este comando:

PRODUCCIÓN:

Conclusión

Este artículo le mostró cómo usar scripts bash para reemplazar las cadenas en un archivo con búsqueda y reemplazar en la línea de comando en bash. Hay muchas maneras de hacer esto, incluso con comandos Sed, Awk, Perl; Puede usar secuencias de comandos bash nativas con bucles y regex y hay más formas de discutir aquí. Bash y Linux tienen muchas formas de hacer el mismo trabajo.