[bash] commande sed
Résolu
enyrix
Messages postés
144
Date d'inscription
Statut
Membre
Dernière intervention
-
zipe31 Messages postés 36402 Date d'inscription Statut Contributeur Dernière intervention -
zipe31 Messages postés 36402 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'essaie d'exécuter deux commande sed une à la suite de l'autre. Individuellement elle fonctionnent bien, mais dès que j'en exécute une à la suite de l'autre j'ai un problème de output.
Premièrement l'option silent, quiet ou -n ne fonctionne pas complètement et deuxièement dans mon fichier de sortie se retrouve seulement l'exécution de la première commande...
J'ai essayer d'utiliser des wait, de mettre les commandes successivement après | etc.. mais ça ne fonctionne pas. Comment exécuté plusieurs commande seed une à la suite de l'autre dans le même fichier sans devoir mettre dans une seule commande.
Merci.
J'essaie d'exécuter deux commande sed une à la suite de l'autre. Individuellement elle fonctionnent bien, mais dès que j'en exécute une à la suite de l'autre j'ai un problème de output.
Premièrement l'option silent, quiet ou -n ne fonctionne pas complètement et deuxièement dans mon fichier de sortie se retrouve seulement l'exécution de la première commande...
J'ai essayer d'utiliser des wait, de mettre les commandes successivement après | etc.. mais ça ne fonctionne pas. Comment exécuté plusieurs commande seed une à la suite de l'autre dans le même fichier sans devoir mettre dans une seule commande.
Merci.
#!/bin/bash clear echo "Début du script patientez..." cp testa tmp echo "Nettoyage de l'entête..." sed --silent -e "/^OLD_FOREIGN_KEY_CHECKS/d" tmp echo "Ajout de lignes..." sed --silent -e '/^LOCK TABLE/a DELETE FROM 'adresse';' tmp mv tmp testb echo "Script complété!"
A voir également:
- [bash] commande sed
- Invite de commande - Guide
- Commande terminal mac - Guide
- Commande dism - Guide
- Diskpart commande - Guide
- Commande scannow - Guide
2 réponses
$ cat plop /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Dumping data for table 'adresse' -- LOCK TABLES 'adresse' WRITE; /*!40000 ALTER TABLE 'adresse' DISABLE KEYS */; INSERT INTO 'adresse' VALUES (1,'abc'); INSERT INTO 'adresse' VALUES (2,'abc'); /*!40000 ALTER TABLE 'adresse' ENABLE KEYS */; UNLOCK TABLES; LOCK TABLES 'test2' WRITE; /*!40000 ALTER TABLE 'adresse' DISABLE KEYS */; INSERT INTO 'test2' VALUES (1,'allo'); /*!40000 ALTER TABLE 'adresse' ENABLE KEYS */; UNLOCK TABLES; $ sed "/OLD_FOREIGN_KEY_CHECKS/d;/LOCK TABLES/{h;s/[^']*\('[^']*'\).*/DELETE FROM \1;/;H;g}" plop /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Dumping data for table 'adresse' -- LOCK TABLES 'adresse' WRITE; DELETE FROM 'adresse'; /*!40000 ALTER TABLE 'adresse' DISABLE KEYS */; INSERT INTO 'adresse' VALUES (1,'abc'); INSERT INTO 'adresse' VALUES (2,'abc'); /*!40000 ALTER TABLE 'adresse' ENABLE KEYS */; UNLOCK TABLES; UNLOCK TABLES; LOCK TABLES 'test2' WRITE; DELETE FROM 'test2'; /*!40000 ALTER TABLE 'adresse' DISABLE KEYS */; INSERT INTO 'test2' VALUES (1,'allo'); /*!40000 ALTER TABLE 'adresse' ENABLE KEYS */; UNLOCK TABLES; UNLOCK TABLES; $
J'ai tester avec un autre fichier avec mes vrais valeurs: la premiere commande fonctionne qui consiste a éliminer la ligne contenant le forein keys (c'est correct) ... par contre ensuite et ça me donne des duplications des lock tables et du unlock au lieu d'ajouter le Delete ...
LOCK TABLES 'adresse' WRITE; LOCK TABLES 'adresse' WRITE; /*!40000 ALTER TABLE 'adresse' DISABLE KEYS */; INSERT INTO 'adresse' VALUES (1,'15, 12ième rue'); /*!40000 ALTER TABLE 'adresse' ENABLE KEYS */; UNLOCK TABLES; UNLOCK TABLES;
Merci Ça semble avoir corrigé le unlock mais pas le truc en double... j'ai ajouter tmp à la suite car je voudrais l'avoir dans un fichier et non à l'écran mais ce n'est pas bon ce qu'il me donne...
Mon script:
Voici ce que j'obtiend à l'écran:
Je redonne mon fichier testa au cas ou:
Merci pour ton aide précieuse!
Mon script:
#!/bin/bash clear echo "Début du script patientez..." cp testx tmp #echo "Nettoyage de l'entête..." #sed -e "/^OLD_FOREIGN_KEY_CHECKS/d" tmp #sed -e '/^LOCK TABLE/a DELETE FROM 'adresse';' tmp sed "/OLD_FOREIGN_KEY_CHECKS/d;/^LOCK TABLES/{h;s/[^']*\('[^']*'\).*/DELETE FROM \1;/;H;g}" tmp #echo "Ajout des lignes pour nettoyage de tables..." #sed '/^LOCK TABLE/a DELETE FROM 'adresse';' tmp echo "Script complété!"
Voici ce que j'obtiend à l'écran:
Début du script patientez... -- MySQL dump 10.13 Distrib 5.1.58, for debian-linux-gnu (x86_64) -- -- Host: localhost Database: XXXXX -- ------------------------------------------------------ -- Server version 5.1.58-1ubuntu1 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Dumping data for table 'adresse' -- LOCK TABLES 'adresse' WRITE; LOCK TABLES 'adresse' WRITE; /*!40000 ALTER TABLE 'adresse' DISABLE KEYS */; INSERT INTO 'adresse' VALUES (1,'5195, 127ième rue'); /*!40000 ALTER TABLE 'adresse' ENABLE KEYS */; UNLOCK TABLES; -- -- Dumping data for table 'affectation_liste_prix' -- LOCK TABLES 'affectation_liste_prix' WRITE; LOCK TABLES 'affectation_liste_prix' WRITE; /*!40000 ALTER TABLE 'affectation_liste_prix' DISABLE KEYS */; INSERT INTO 'affectation_liste_prix' VALUES (1,'2010-02-01 00:00:00',1,5,1,1,0),(2,'2011-03-01 00:00:00',1,2,1,0,0); /*!40000 ALTER TABLE 'affectation_liste_prix' ENABLE KEYS */; UNLOCK TABLES; Script complété! root@ubuntu:/_bashscripts#
Je redonne mon fichier testa au cas ou:
-- MySQL dump 10.13 Distrib 5.1.58, for debian-linux-gnu (x86_64) -- -- Host: localhost Database: XXXXX -- ------------------------------------------------------ -- Server version 5.1.58-1ubuntu1 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Dumping data for table 'adresse' -- LOCK TABLES 'adresse' WRITE; /*!40000 ALTER TABLE 'adresse' DISABLE KEYS */; INSERT INTO 'adresse' VALUES (1,'5195, 127ième rue'); /*!40000 ALTER TABLE 'adresse' ENABLE KEYS */; UNLOCK TABLES; -- -- Dumping data for table 'affectation_liste_prix' -- LOCK TABLES 'affectation_liste_prix' WRITE; /*!40000 ALTER TABLE 'affectation_liste_prix' DISABLE KEYS */; INSERT INTO 'affectation_liste_prix' VALUES (1,'2010-02-01 00:00:00',1,5,1,1,0),(2,'2011-03-01 00:00:00',1,2,1,0,0); /*!40000 ALTER TABLE 'affectation_liste_prix' ENABLE KEYS */; UNLOCK TABLES;
Merci pour ton aide précieuse!
Je crois que l'output fonctionne avec:
Je crois que c'étais le fait que je tentais de lire un fichier et de réécrire par dessus (je sais pas si c'est possible de faire autrement mais ça ça fonctionne...
Il me reste le problème du doubons... Aussi j'aimerais savoir si tu sais pourquoi deux sed ne fonctionnait pas un à la suite de l'autre ? Parce que comme c'est la si je dois par exemple faire un e boucle pour enlever plusieurs ligne autre que OLD_FOREIGN_KEY_CHECKS par exemple via un array je vais surement être mal pris..
cp testx tmp sed "/OLD_FOREIGN_KEY_CHECKS/d;/^LOCK TABLES/{h;s/[^']*\('[^']*'\).*/DELETE FROM \1;/;H;g}" tmp > tmp2
Je crois que c'étais le fait que je tentais de lire un fichier et de réécrire par dessus (je sais pas si c'est possible de faire autrement mais ça ça fonctionne...
Il me reste le problème du doubons... Aussi j'aimerais savoir si tu sais pourquoi deux sed ne fonctionnait pas un à la suite de l'autre ? Parce que comme c'est la si je dois par exemple faire un e boucle pour enlever plusieurs ligne autre que OLD_FOREIGN_KEY_CHECKS par exemple via un array je vais surement être mal pris..
Fichier de sortie voulue: