elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Quitar 1 expresion con SED
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Quitar 1 expresion con SED  (Leído 3,368 veces)
^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Quitar 1 expresion con SED
« 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?


En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Quitar 1 expresion con SED
« Respuesta #1 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.


« Última modificación: 13 Diciembre 2009, 23:49 pm por Leo Gutierrez. » En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: Quitar 1 expresion con SED
« Respuesta #2 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`
En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: Quitar 1 expresion con SED
« Respuesta #3 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
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Qué significa la expresión: oir las 12?
Foro Libre
Hurubnar 0 1,619 Último mensaje 12 Marzo 2011, 20:33 pm
por Hurubnar
duda con expresión booleana
Dudas Generales
.:UND3R:. 3 4,032 Último mensaje 3 Noviembre 2011, 21:33 pm
por .:UND3R:.
Duda con expresión booleana
Programación C/C++
Denok 4 2,795 Último mensaje 5 Enero 2012, 02:51 am
por rir3760
duda con expresion posfija
Dudas Generales
m@o_614 1 1,857 Último mensaje 20 Noviembre 2014, 06:58 am
por DarK_FirefoX
Ayuda con expresion C++
Programación C/C++
genki__ 3 2,417 Último mensaje 21 Abril 2015, 16:47 pm
por genki__
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines