
Tengo esta línea en mi archivo llamado test.php
'dbs_password' => 'a8b*cyP0',
y quiero reemplazar en:
'dbs_password' => 'password-here',
Entonces uso este sed
comando con sintaxis:
$ sed -e "s:'dbs_password' => 'a8b*cyP0',:'dbs_password' => 'password-here':" -i test.php
Sin embargo, no cambia ni es reemplazado.
Le agradecería que alguien pudiera compartir algún conocimiento sobre la forma correcta de utilizar sed
este tipo de código.
Respuesta1
El problema es que *
en expresiones regulares significa 0 or more of the preceeding character
, no significa literal *
. Para hacer coincidir a *
, necesitasescaparél. Por ejemplo:
sed -i "s:'dbs_password' => 'a8b\*cyP0',:'dbs_password' => 'password-here':" test.php
Sin embargo, esto es innecesariamente complejo. Si quieres reemplazartodas las ocurrenciasde la cadena a8b*cyP0
con password-here
, simplemente puedes hacer:
sed -i "s:a8b\*cyP0:password-here:" test.php
Si quieres reemplazarsoloesas líneas que coinciden dbs_password
, haz:
sed -i "s:\(.*dbs_password.*\)'a8b\*cyP0':\1'password-here':" test.php
Este último hace uso decaptura de patronespara evitar imprimir el mismo patrón dos veces.