Quitar 1 expresion con SED

Iniciado por ^Tifa^, 13 Diciembre 2009, 23:01 PM

0 Miembros y 1 Visitante están viendo este tema.

^Tifa^

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 (perl) [Seleccionar]

#!/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:

Código (perl) [Seleccionar]


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?

leogtz

#1
A lo mejor cometo una burrada, pero ^TiFa^, ya probaste con sed ' ....', es decir, usar ' ' en vez de dobles comillas.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

^Tifa^

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`

^Tifa^

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