[bash] commande sed
Résolu/Fermé
enyrix
Messages postés
144
Date d'inscription
vendredi 11 novembre 2011
Statut
Membre
Dernière intervention
7 avril 2021
-
27 juin 2012 à 17:16
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 28 juin 2012 à 10:32
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 28 juin 2012 à 10:32
A voir également:
- [bash] commande sed
- Invite de commande - Guide
- Commande terminal mac - Guide
- Commande dism - Guide
- Commande sfc scannow - Guide
- Diskpart commande - Guide
2 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 422
27 juin 2012 à 17:25
27 juin 2012 à 17:25
Salut,
On peut avoir un exemple de ton fichier s'teuplé ?
On peut avoir un exemple de ton fichier s'teuplé ?
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 422
27 juin 2012 à 18:15
27 juin 2012 à 18:15
$ 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; $
enyrix
Messages postés
144
Date d'inscription
vendredi 11 novembre 2011
Statut
Membre
Dernière intervention
7 avril 2021
8
27 juin 2012 à 18:51
27 juin 2012 à 18:51
Ça ma l'air bon du premier coup, cela l'affiche à l'écran mais l'output vers le fichier ne semble pas correct. Je ne comprend pas trop la commande aussi, si c'est possible de m'expliquer en gros. Merci !
enyrix
Messages postés
144
Date d'inscription
vendredi 11 novembre 2011
Statut
Membre
Dernière intervention
7 avril 2021
8
27 juin 2012 à 19:02
27 juin 2012 à 19:02
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;
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 422
27 juin 2012 à 19:05
27 juin 2012 à 19:05
Ouos sorry, j'avais oublié un "^" ;-(
sed "/OLD_FOREIGN_KEY_CHECKS/d;/^LOCK TABLES/{h;s/[^']*\('[^']*'\).*/DELETE FROM \1;/;H;g}"
enyrix
Messages postés
144
Date d'inscription
vendredi 11 novembre 2011
Statut
Membre
Dernière intervention
7 avril 2021
8
27 juin 2012 à 19:15
27 juin 2012 à 19:15
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!
enyrix
Messages postés
144
Date d'inscription
vendredi 11 novembre 2011
Statut
Membre
Dernière intervention
7 avril 2021
8
27 juin 2012 à 19:26
27 juin 2012 à 19:26
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..
27 juin 2012 à 17:37
Fichier de sortie voulue:
27 juin 2012 à 17:39