bash – usa sed para reemplazar parte de una cadena

Pregunta:

Planeo reemplazar ciertas cadenas en un archivo; entonces estoy usando sed.

Me gustaría que se reemplazara la cadena, mientras que, en cambio, sed leer la cadena y agregar el texto en el medio de la cadena.

Ejemplo:

string in myfile : user=blabla
string that I want to obtain: user=bob

así que ejecuto sed de esta manera, para que busque la cadena "user =" y la reemplace con "user = bob"

sed -i 's/user=*/user=bob/' myfile

Lo que obtengo es

user=bobblabla

Básicamente, sed creo que quiero reemplazar solo esa parte, mientras que quiero reemplazar toda la cadena con la nueva cadena. Pensé que * le diría a sed que considere cualquier cosa que venga después, pero no funciona.

Como no sé cuál será el "blabla", no puedo ponerlo en el comando sed. ¿Cómo le digo a sed que busque una cadena que comience con "user =" y reemplace toda la cadena por la nueva?

Respuesta:

Parece que confunde los patrones de shell con las expresiones regulares. En un patrón de shell, * significa cero o más de cualquier carácter. En una expresión regular, que es lo que sed espera en sus patrones, * significa cero o más del átomo anterior. En su ejemplo, ese átomo es = . Entonces, sed está buscando user seguido de cero o más = y reemplazando la cadena correspondiente con user=bob . El patrón que desea es user=.* , Que es user= seguido de cualquier carácter ( . ) Cero o más veces, lo que hace que su comando sed :

sed -i 's/user=.*/user=bob/' myfile

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Ir arriba