Cómo reemplazar el último ocurrencia usando 'SED'

Cómo reemplazar el último ocurrencia usando 'SED'
El comando 'Sed' se usa en Linux para varios tipos de operaciones de texto, como Insertar, Eliminar, Reemplazar, etc. Se pueden realizar diferentes tipos de tareas de reemplazo utilizando el comando 'Sed' fácilmente. Cualquier tarea de reemplazo se puede hacer en función del texto o el patrón de búsqueda. El texto o patrón de búsqueda puede ocurrir varias veces en la cadena o un archivo donde se realizará la búsqueda. La forma en que puede reemplazar la última aparición del texto o patrón de búsqueda se ha mostrado en este tutorial.

Reemplace la última aparición del texto en una cadena:

Esta sección muestra cómo se puede reemplazar la última ocurrencia del patrón de búsqueda en una cadena utilizando el comando 'sed'.

Ejemplo-1: reemplace la última aparición de una palabra basada en el patrón

El siguiente comando 'sed' buscará la palabra 'PHP' en la cadena y reemplace la palabra de búsqueda con la palabra 'Angularjs' Si la palabra existe en la cadena.

$ Echo "Java Php Bash Python JavaScript Perl Php Laravel" |
sed 's/\ (.*\) Php/\ 1angularjs/'

La siguiente salida aparecerá después de ejecutar el comando. Aquí, la palabra 'PHP' existe dos veces en la cadena, y la última ocurrencia ha sido reemplazada por la palabra ' Angularjs'.

Ejemplo-2: reemplace la última aparición del patrón basado en dígitos

El siguiente comando 'sed' buscará cualquier dígito en la cadena y reemplazará el último dígito con el número 9.

$ Echo "El primer valor de contador 2. El segundo valor de contador 4 "|
sed 's/\ (.*\) [0-9])*/\ 19/'

La siguiente salida aparecerá después de ejecutar el comando. Aquí, el dígito aparece dos veces en la cadena y el último dígito, 4, ha sido reemplazado por el número 9.

Ejemplo-3: reemplace el último dígito de un número basado en el patrón

El siguiente comando 'sed' reemplazará el último dígito que existe en el valor de la cadena por el valor por doble cero (0 0).

$ Echo "El precio del producto es de $ 500."| Sed 's/\ (.*\) [0-9]/\ 100/'

La siguiente salida aparecerá después de ejecutar el comando. Aquí, 500 existe en el valor de la cadena. Entonces, según el comando de reemplazo, el último cero de 500 ha sido reemplazado por dos doble cero, y el valor reemplazado es 5000.

Ejemplo-4: reemplace la última aparición de una palabra con otra palabra

El siguiente comando 'sed' buscará la palabra 'Jun' en la cadena y reemplace la última aparición de la palabra con el valor, 'Puede'.

$ printf "%s \ n" enero de febrero de junio de junio de diciembre | tr '\ n' "|
sed 's/\ (.*\) Jun/\ 1May/'| tr "'\ n'

La siguiente salida aparecerá después de ejecutar el comando. Aquí, la palabra 'Jun' existe dos veces en la cadena, y la última ocurrencia ha sido reemplazada por la palabra 'Puede'.

Reemplace la última aparición de un texto en un archivo:

Crear un archivo de texto llamado Ventas.TXT con el siguiente contenido para probar el comando 'sed' utilizado en esta parte del tutorial para reemplazar la última ocurrencia de un texto en el patrón.

Ventas.TXT

Monto del año mes
Enero de 2018 $ 200000
Marzo de 2019 $ 300000
Abril de 2019 $ 150000
Marzo 2020 $ 350000
Mayo de 2019 $ 210000
Enero de 2020 $ 240000

Ejemplo-5: Reemplace la última aparición de una palabra con otra palabra

El siguiente comando 'sed' buscará la palabra 'Enero'En el archivo y reemplace la última ocurrencia de esta palabra con la palabra, 'Julio'.

$ Ventas de Cat.TXT
$ sed '$ s/enero/julio/' ventas.TXT

La siguiente salida aparecerá después de ejecutar los comandos. La palabra 'Enero' aparece dos veces en el archivo. El último ocurrencia que existe en el 7th La línea del archivo ha sido reemplazada por la palabra 'Julio'En la salida.

Ejemplo-6: reemplace la última aparición de un número con otro número

'Tac' El comando se usa para revertir el contenido del archivo. 'Tac' El comando se usa con el comando 'sed' en el siguiente comando para reemplazar la última ocurrencia de '2019'Con la palabra, '2017'.

$ Ventas de Cat.TXT
$ TAC Ventas.txt | sed '0,/2019/S/2019/2017/' | TAC

La siguiente salida aparecerá después de ejecutar los comandos. Aquí, el valor del año, '2019'aparece tres veces en el archivo. La primera, 'Tac' El comando ha revertido el contenido del archivo y ha enviado la salida al 'sed' comandar reemplazar la primera ocurrencia de '2019' cuál es la última ocurrencia en el archivo por el valor del año, '2017'. Después del reemplazo, la salida se ha enviado al 'Tac' Comandar para revertir la salida nuevamente. De esta manera, la última ocurrencia de '2019'ha sido reemplazado por el valor, '2017'.

Ejemplo-7: reemplace todo de una línea basada en la última ocurrencia de una palabra

La siguiente 'sed' El comando reemplazará la línea con una pestaña (\ t) texto delimitado donde la línea comienza con la cadena 'Mar' por última vez en el archivo.

$ Ventas de Cat.TXT
$ TAC Ventas.txt | sed '0,/^Mar.*/s/^mar.*/Julio \ t \ t2018 \ t $ 400000/ '| TAC

La siguiente salida aparecerá después de ejecutar los comandos. Dos líneas en el archivo comienzan con la cadena, 'Mar', y la última aparición de esta cadena aparece en el 5th línea. La primera 'Tac' El comando se ha utilizado para revertir el contenido del archivo y enviado la salida al 'sed ' dominio. 'sed'El comando ha reemplazado la línea con un texto',Jully 2018 $ 400000'Donde la cadena de búsqueda se encuentra por primera vez. La salida de el 'sed'El comando ha sido enviado al 'Tac' Complete nuevamente para revertir la salida que es el contenido principal del archivo.

Conclusión:

El comando 'sed' se puede usar para reemplazar cualquier parte de una cadena o una línea del archivo de diferentes maneras utilizando patrones de expresión regulares. Este tutorial mostró las formas de reemplazar la última aparición del texto de búsqueda en una cadena o un archivo utilizando múltiples comandos 'SED'. Cómo se puede usar el comando 'TAC' con el comando 'Sed' para reemplazar la última aparición del texto de búsqueda también se ha mostrado en este tutorial. Pero todos los comandos utilizados aquí generarán la salida temporalmente. Debe usar la opción '-i' con el comando 'sed' para cambiar el contenido del archivo permanentemente en función del patrón.