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