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
Por que no pruebas con perl,
Por que no pruebas con perl, creo que vas a necesitar usar expresiones regulares.
bye
;)
Estaba pensando en usar awk,
Estaba pensando en usar awk, y expresiones regulares.
Se que la clave esta en la expresion regular, creamente que he buscado ejemplos pero no doy...
Estube investigando la siguiente pagina y nada que lo logro
Expresion_Regular_1
Expresion_Regular_2
Si el nombre de la base está
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
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
Sí por eso puse NOMBRE_DB en
Sí por eso puse NOMBRE_DB en la recomendación de antes. Modifica lo que te dí hasta que te funcione.