Saltar al contenido

¿Cómo usar sed para reemplazar solo la primera aparición en un archivo?

Nuestro team especializado pasados algunos días de investigación y recopilación de de datos, obtuvimos los datos necesarios, deseamos que te sea útil en tu plan.

Solución:

A sed secuencia de comandos que solo reemplazará la primera aparición de “Apple” por “Banana”

Ejemplo

     Input:      Output:

     Apple       Banana
     Apple       Apple
     Orange      Orange
     Apple       Apple

Este es el script simple: Nota del editor: funciona con ÑUsed solo.

sed '0,/Apple/s/Apple/Banana/' input_filename

Los dos primeros parámetros 0 y /Apple/ son el especificador de rango. El s/Apple/Banana/ es lo que se ejecuta dentro de ese rango. Entonces, en este caso “dentro del rango del principio (0) hasta la primera instancia de Apple, reemplazar Apple con Banana. Solo el primero Apple será reemplazado.

Antecedentes: en tradicional sed el especificador de rango también es “comenzar aquí” y “terminar aquí” (inclusive). Sin embargo, el “comienzo” más bajo es la primera línea (línea 1), y si el “final aquí” es una expresión regular, entonces solo se intenta hacer coincidir en la siguiente línea después de “comenzar”, por lo que el final más temprano posible es la línea 2. Por lo tanto, dado que el rango es inclusivo, el rango más pequeño posible es “2 líneas” y el rango de inicio más pequeño son las líneas 1 y 2 (es decir, si hay una ocurrencia en la línea 1, las ocurrencias en la línea 2 también se cambiarán, no deseado en este caso ). GNU sed agrega su propia extensión de permitir especificar el inicio como el “pseudo” line 0 para que el final del rango pueda ser line 1, lo que le permite un rango de “solo la primera línea” si la expresión regular coincide con la primera línea.

O una versión simplificada (un RE vacío como // significa reutilizar el especificado antes, por lo que esto es equivalente):

sed '0,/Apple/s//Banana/' input_filename

Y las llaves son opcionales para el s comando, por lo que esto también es equivalente:

sed '0,/Apple/s//Banana/' input_filename

Todos estos funcionan en GNU sed solo.

También puede instalar GNU sed en OS X usando homebrew brew install gnu-sed.

 # sed script to change "foo" to "bar" only on the first occurrence
 1x;s/^/first/;x;
 1,/foo/x;/first/s///;x;s/foo/bar/;
 #---end of script---

o, si lo prefiere: Nota del editor: funciona con ÑUsed solo.

sed '0,/foo/s//bar/' file 

Fuente

sed '0,/pattern/s/pattern/replacement/' filename

esto funcionó para mí.

ejemplo

sed '0,//s//Sub menu/' try.txt > abc.txt

Nota del editor: ambos funcionan con ÑUsed solo.

Aquí tienes las comentarios y valoraciones

Si piensas que ha sido provechoso este post, sería de mucha ayuda si lo compartieras con otros seniors de esta forma nos ayudas a dar difusión a esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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