Buscar la primera concidencia en una cadena y reemplazar

Forums: 

Para buscar una cadena y reemplazarla tengo la siguiente linea


sed "s_"textoBuscado"_"textoReemplazar"_g" < archivo.php > $1.tmp
cp $1.tmp archivo.php
rm $1.tmp

Tratare de explicarlo bien. El texto buscado realmente no lo conozco, es es una linea con varias palabras y conozco las palabras anteriores al textoBuscado

Ejemplo
De un archivo se quiere reemplazar la seccion que llamo DataBase, pero no se como se llame la DataBase, lo que si se es que va a estar siempre en ese lugar.


$CONFIG["NOMBRE_DB"][$indice]="DataBase";

Por ahora solucionar esto.. pero se puede complicar un poco mas..

Gracias de antemano

Si el nombre de la base está

Imagen de acl

Si el nombre de la base está siempre antes del punto y coma que termina la línea, puedes hacer la correspondencia desde el final de la línea. Prueba con algo más o menos así:


$ sed 's/\[NOMBRE_DB\].*=.*\".*\";$/="elreemplazo";/' elnombredelarchivo

ACL, gracias por la

ACL, gracias por la respuesta.

Muy buena tu idea de relacionarse por el ";". No se me habia ocurrido.

Sin embargo la expresion regular que pones no filtra nada. Lo puse tal cual en la consola y en un script y no cambio nada.


sed 's/\[NOMBRE_DB\].*=.*\".*\";$/="elreemplazo";/' file.php

De la expresion entiendo mas o menos lo siguiente

1) No entiendo el simbolo \ antes del simbolo [ --> (Entiendo que el simbolo \ es un caracter de Escape :-s)
2) El .* despues del simbolo ] --> (Este si creo que lo entiendo)
3) Sin embargo el .* despues del = --> (Este si no lo entiendo)
4) El simbolo $ despues del ; ---> (Es que indica el final de la linea :-D)

Lo intente de la siguiente manera

sed 's/\[NOMBRE_DB\].*=\".*\";$/="elreemplazo";/' file.php

Y tampoco

Creo que bastaría con

Imagen de acl

Creo que bastaría con 's/=\".*\";$/="elreemplazo";/'. Lo que te dí arriba reemplazaría incluso lo que va entre corchetes. Y puedes agregar la opción -i a sed para que te haga el reemplazo en el mismo archivo sin que tengas que hacerle la copia tú mismo.

Gracias nuevamente eso

Gracias nuevamente eso funciona bien. Que pena con ustedes creaneme que estoy documentandome mucho sobre expresiones regulares pero estoy bloquado, es decir aun nada que entiendo al tema.

Resulta que el archivo en cuestion tiene varias lineas


$CONFIG["NOMBRE_DB"][$indice]="DataBase";
$CONFIG["USUARIO_DB"][$indice]="postgres";
$CONFIG["PUERTO_DB"][$indice]="3452";
$CONFIG["DRIVER_DB"][$indice]="pgsql";
$CONFIG["IP_MAQUINA"][$indice]="";

Y adivinen que sucedio ???, igual al ver la linea que comento ACL pues lo esperaba por eso realice una copia del archivo antes de, jejeje

Estoy bloqueado, estas expresiones regulares no me van muy bien con ellas