Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: ^Tifa^ en 13 Diciembre 2009, 23:01 pm



Título: Quitar 1 expresion con SED
Publicado por: ^Tifa^ en 13 Diciembre 2009, 23:01 pm
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:

Código
  1. #!/bin/bash -x
  2.  
  3. mensaje="UNLOCK TABLES*";
  4. mensajito="LOCK TABLES*";
  5. archivo="/home/marian/pepe/backup.sql";
  6. mensaje1="*";
  7. mensaje2="*";
  8. mensaje3="ENGINE*";
  9. new="/home/marian/pepe/nuevo.txt";
  10. fin="NULL  ";
  11. curva=")";
  12. indices="KEY";
  13. tabla="DROP TABLE*"
  14. extra="``";
  15.  
  16. sed "/$mensaje/d"  $archivo > nuevo.txt
  17. sed "/$mensajito/d" $new > tmp && mv tmp $new
  18. sed "/$mensaje1/d" $new > tmp && mv tmp $new
  19. sed "/$mensaje2/d" $new > tmp && mv tmp $new
  20. sed "/$tabla/d" $new > tmp && mv tmp $new
  21. sed "/$extra/d" $new > tmp && mv tmp $new
  22. sed "s/$indices/UNIQUE/" $new > tmp && mv tmp $new
  23. sed "/^$/d" $new > tmp && mv tmp $new
  24. sed -e "/$mensaje3/G" $new > tmp && mv tmp $new
  25. sed "/$mensaje3/d" $new > tmp && mv tmp $new
  26. sed "s/^$/$curva/" $new > tmp && mv tmp $new
  27.  
  28.  

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:

Código
  1.  
  2. bash-3.1$ cat nuevo.txt                                        
  3. -- MySQL dump 10.13  Distrib 5.4.3-beta, for pc-linux-gnu (i686)
  4. --                                                              
  5. -- Host: localhost    Database: primaria                        
  6. -- ------------------------------------------------------      
  7. -- Server version       5.4.3-beta                              
  8. --                                                              
  9. -- Table structure for table `copia`                            
  10. --                                                              
  11. CREATE TABLE `copia` (                                          
  12.  `data` int(11) DEFAULT NULL,                                  
  13.  `apellidos` char(20) DEFAULT NULL,                            
  14.  UNIQUE `data` (`data`)                                        
  15. )                                                              
  16. --                                                              
  17. -- Dumping data for table `copia`                              
  18. --                                                              
  19. INSERT INTO `copia` VALUES (1,'Lopez'),(2,'Sanchez'),(2,'Sanz'),(5,'Heredia'),(4,'Mendeira');
  20. --                                              
  21.  
  22.  

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?


Título: Re: Quitar 1 expresion con SED
Publicado por: leogtz en 13 Diciembre 2009, 23:46 pm
A lo mejor cometo una burrada, pero ^TiFa^, ya probaste con sed ' ....', es decir, usar ' ' en vez de dobles comillas.


Título: Re: Quitar 1 expresion con SED
Publicado por: ^Tifa^ en 14 Diciembre 2009, 00:13 am
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`


Título: Re: Quitar 1 expresion con SED
Publicado por: ^Tifa^ en 14 Diciembre 2009, 00:28 am
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