Hola. :D
Estoy haciendo una migracion manual de un dumpeo de un esquema de MySQL hacia Oracle. (Se que puedo utilizar ETL gratuitos o Oracle Workbench) pero no es el caso, no hay servidor grafico y no puedo instalar muchas cosas raras en el PC que es.
Bien asi que la migracion que en este caso son sencillas (tablas nada de procedimientos, ni triggers ni funciones) he creado el siguiente script en bash que me serviria con una unica falla:
#!/bin/bash -x
mensaje="UNLOCK TABLES*";
mensajito="LOCK TABLES*";
archivo="/home/marian/pepe/backup.sql";
mensaje1="*";
mensaje2="*";
mensaje3="ENGINE*";
new="/home/marian/pepe/nuevo.txt";
fin="NULL ";
curva=")";
indices="KEY";
tabla="DROP TABLE*"
extra="``";
sed "/$mensaje/d" $archivo > nuevo.txt
sed "/$mensajito/d" $new > tmp && mv tmp $new
sed "/$mensaje1/d" $new > tmp && mv tmp $new
sed "/$mensaje2/d" $new > tmp && mv tmp $new
sed "/$tabla/d" $new > tmp && mv tmp $new
sed "/$extra/d" $new > tmp && mv tmp $new
sed "s/$indices/UNIQUE/" $new > tmp && mv tmp $new
sed "/^$/d" $new > tmp && mv tmp $new
sed -e "/$mensaje3/G" $new > tmp && mv tmp $new
sed "/$mensaje3/d" $new > tmp && mv tmp $new
sed "s/^$/$curva/" $new > tmp && mv tmp $new
Mi falla es en la variable $extra="`" como bien saben la comilla inclinada (`) sirve para ejecucion, y no encuentro forma de quitarla con SED en el archivo generado por mysqldump:
bash-3.1$ cat nuevo.txt
-- MySQL dump 10.13 Distrib 5.4.3-beta, for pc-linux-gnu (i686)
--
-- Host: localhost Database: primaria
-- ------------------------------------------------------
-- Server version 5.4.3-beta
--
-- Table structure for table `copia`
--
CREATE TABLE `copia` (
`data` int(11) DEFAULT NULL,
`apellidos` char(20) DEFAULT NULL,
UNIQUE `data` (`data`)
)
--
-- Dumping data for table `copia`
--
INSERT INTO `copia` VALUES (1,'Lopez'),(2,'Sanchez'),(2,'Sanz'),(5,'Heredia'),(4,'Mendeira');
--
Lo que la variable $extra en este caso me esta haciendo es eliminandome todas las lineas donde encuentre la dichosa comilla `valor` la linea completa :-\ y yo solo quiero que por ejemplo a:
CREATE TABLE `copia`
me lo deje como
CREATE TABLE copia
lo unico que quiero eliminar es la comillita simple inclinada no el valor dentro de la misma.
Alguien sabe como puedo hacer eso con el comando SED en Linux?
A lo mejor cometo una burrada, pero ^TiFa^, ya probaste con sed ' ....', es decir, usar ' ' en vez de dobles comillas.
No creo que cometas una burrada.
Si lamentablemente si habia probrado con comillas simples en vez de dobles en la variable $extra pero si utilizo comillas simples asi:
extra='`'
Resulta que SED se lleva la linea completa donde vea `
Quedando mi archivo copia (El que debo cargar en Oracle asi)
Citar-- Host: localhost Database: primaria
-- ------------------------------------------------------
-- Server version 5.4.3-beta
--
--
)
--
--
--
--
)
Donde sea que encuentre un
Create table `copia`
me elimina la linea completa.... y ando dandole vueltas haber como decirle que no sea la linea completa, sino sencillamente la comilla inclinada ` para que quede normal
CREATE TABLE copia
en vez de
CREATE TABLE `copia`
Ya pude sacar algo y resolverlo... no es lo mas optimo pero funciona.
Todo era hacer:
Citar
extra='`';
sed "s/$extra/ /" $new > tmp && mv tmp $new
sed "s/$extra/ /" $new > tmp && mv tmp $new
AHora si ya me carga el script en Oracle :P