2010-01-27 4 views
4

Essayer de diriger la sortie d'un remplacement sed sur un fichier texte dans MySQL comme ceci:Script shell: envoie la sortie sed à mysql?

mysql -D WAR | sed -e "s/2000/$START/g" -e "s/2009/$END/g" < WAR.sql 

qui ne fonctionne pas. Ni:

mysql -D WAR < sed -e "s/2000/$START/g" -e "s/2009/$END/g" < WAR.sql 

Quelle est la bonne solution ici?

Répondre

5
sed -e "s/2000/$START/g" -e "s/2009/$END/g" < WAR.sql | mysql -D WAR 
+1

pas besoin de redirection d'entrée. – ghostdog74

0
mysql -D WAR < <(sed -e "s/2000/$START/g" -e "s/2009/$END/g" < WAR.sql) 
1

Juste pour expliquer un peu plus, la ligne de commande va de gauche à droite, sauf dans le cas de redirection de l'entrée. Donc, la raison pour laquelle votre premier n'a pas fonctionné est parce que cela prenait la OUTPUT de mysql et l'envoyait à sed, en plus d'essayer de rediriger l'entrée vers sed depuis le fichier 'WAR.sql'. Dans le second cas, vous utilisez la redirection de fichiers sur mysql, sauf que vous lui donnez une commande (sed, dans ce cas), ce qui signifie que le shell a probablement essayé d'ouvrir un fichier [inexistant] nommé 'sed' dans le répertoire courant. La redirection d'entrée suivante l'a probablement confondue si le shell a même été aussi loin dans l'analyse syntaxique.

Je crois (et voté pour) la réponse de gbacon comme la solution la plus simple pour réaliser ce que je pense que vous voulez.

6
sed "s/2000/$START/g;s/2009/$END/g" WAR.sql | mysql -D WAR 
+0

oui, c'est mieux que la réponse acceptée –