SED ou AWK pour fichier requêtes multiples
Résolu/Fermé
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
-
16 juin 2009 à 09:41
pcsystemd Messages postés 702 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024 - 16 juin 2009 à 15:25
pcsystemd Messages postés 702 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024 - 16 juin 2009 à 15:25
A voir également:
- SED ou AWK pour fichier requêtes multiples
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir fichier .bin - Guide
- Fichier host - Guide
7 réponses
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
23
16 juin 2009 à 15:25
16 juin 2009 à 15:25
Bon c'est ok. En faites il n'y a plus d'espaces devant chaque ligne dans mon fichier c'est pourquoi la ligne de commande ne fonctionnait pas chez moi. Je l'ai modifié comme suit en enlevant l'espace entre le ^/ et c'est ok
Merci encore jipicy pour le temps que tu m'as accordé.
sed "/^/{s/.*/INSERT INTO matable1 (acti,mail) VALUES(1,'&');\n\ INSERT INTO matable2 (uid,tid) VALUES(LAST_INSERT_ID(),507);/}\ " plop > toto
Merci encore jipicy pour le temps que tu m'as accordé.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
16 juin 2009 à 11:21
16 juin 2009 à 11:21
Salut,
sed -n "/^ /{s/ \(.*\)/INSERT INTO mybd (act,mail) VALUES(1,'\1');\n\ INSERT INTO simplenews_snid_tid (snid,tid) VALUES(LAST_INSERT_ID(),507);\n\ INSERT INTO simplenews_subscriptions (activated,mail)/p}"
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
23
16 juin 2009 à 12:28
16 juin 2009 à 12:28
Merci encore une fois. J''ai du mal a comprendre la synthaxe de SED pourtant c'est pas faute d'avoir lu ton tuto et d'autres mais j'ai toujours du mal a me souvenir de tous les paramètres ainsi que des diffèrences lorsque tu lance SED en ligne de commande ou depuis un script.
Dans la commande que tu m'indiques quels sont les paramètres que tu utilises pour supprimer les espaces devant chaque ligne ainsi que
email
----------------------------------------------------
Et si je n'avais pas d'espaces a supprimer ni
email
----------------------------------------------------
qu'elle serait la commande SED?
Merci mille fois
L'accès au savoir est la première liberté que chaque homme devrait avoir.
Dans la commande que tu m'indiques quels sont les paramètres que tu utilises pour supprimer les espaces devant chaque ligne ainsi que
----------------------------------------------------
Et si je n'avais pas d'espaces a supprimer ni
----------------------------------------------------
qu'elle serait la commande SED?
Merci mille fois
L'accès au savoir est la première liberté que chaque homme devrait avoir.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
16 juin 2009 à 12:52
16 juin 2009 à 12:52
Dans la commande que tu m'indiques quels sont les paramètres que tu utilises pour supprimer les espaces devant chaque ligne
En fait j'utilise les sous-expressions et références arrières.
Ta ligne commence par un espace et nous voulons récupérer ce qui se trouve derrière. Donc dans la commande de substitution (côté gauche) mon motif ressemble à :
/ \(.*\)/
Un espace après le caractère délimiteur (/) et la sous-expression qui renferme le reste de la ligne (.*). C'est cette sous-expression qui sera appelée dans la partie droite de remplacement en y faisant référence par le numéro correspondant à sa place (ici il n'y en a qu'une, donc c'est la référence "\1")
ainsi que
email
----------------------------------------------------
Tu as du remarqué l'option "-n" en début de syntaxe (sed -n), la condition "/^ /" (ne matcher que les lignes commençant par un espace) et le flag "p" en fin de syntaxe, ce qui implique que seules les lignes correspondant au motif (commençant par un espace) seront envoyées sur la sortie standard.
Et si je n'avais pas d'espaces a supprimer ni
email
----------------------------------------------------
qu'elle serait la commande SED?
On retire l'option "-n" et le flag "p", puis plus besoin de sous-expression ni de référence arrière, juste l'emploi du méta-caractère & à la place :
En fait j'utilise les sous-expressions et références arrières.
Ta ligne commence par un espace et nous voulons récupérer ce qui se trouve derrière. Donc dans la commande de substitution (côté gauche) mon motif ressemble à :
/ \(.*\)/
Un espace après le caractère délimiteur (/) et la sous-expression qui renferme le reste de la ligne (.*). C'est cette sous-expression qui sera appelée dans la partie droite de remplacement en y faisant référence par le numéro correspondant à sa place (ici il n'y en a qu'une, donc c'est la référence "\1")
ainsi que
----------------------------------------------------
Tu as du remarqué l'option "-n" en début de syntaxe (sed -n), la condition "/^ /" (ne matcher que les lignes commençant par un espace) et le flag "p" en fin de syntaxe, ce qui implique que seules les lignes correspondant au motif (commençant par un espace) seront envoyées sur la sortie standard.
Et si je n'avais pas d'espaces a supprimer ni
----------------------------------------------------
qu'elle serait la commande SED?
On retire l'option "-n" et le flag "p", puis plus besoin de sous-expression ni de référence arrière, juste l'emploi du méta-caractère & à la place :
sed -n "/^ /{s/.*/blablabla'&');blablabla/"
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
23
16 juin 2009 à 13:36
16 juin 2009 à 13:36
Donc si je te suis bien ça c'est moins sûr, j'ai fait :
le souci c'est que le fichier test2.sql est vide!!
Merci
sed -n "/^ /{s/.*/INSERT INTO matable1 (acti,mail) VALUES(1,'&');\n\ INSERT INTO matable2 (uid,tid) VALUES(LAST_INSERT_ID(),507);/}" test.sql > test2.sql
le souci c'est que le fichier test2.sql est vide!!
Merci
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
16 juin 2009 à 14:25
16 juin 2009 à 14:25
Tu as oublié d'enlever l'option "-n" :
-n, --quiet, --silent
* Demande implicite de ne pas afficher l'état de la mémoire principale (mémoire tampon). À l'intérieur d'un script, la notation se fera de cette façon "#n" (un signe dièse suivi du caractère "n") et devra se trouver sur la 1ère ligne du script.
En deux mots, cette option empêche l'affichage sur la sortie standard. Elle doit être employée conjointement avec le flag "p".
-n, --quiet, --silent
* Demande implicite de ne pas afficher l'état de la mémoire principale (mémoire tampon). À l'intérieur d'un script, la notation se fera de cette façon "#n" (un signe dièse suivi du caractère "n") et devra se trouver sur la 1ère ligne du script.
En deux mots, cette option empêche l'affichage sur la sortie standard. Elle doit être employée conjointement avec le flag "p".
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
23
16 juin 2009 à 14:49
16 juin 2009 à 14:49
Bin écoute je dois vraiement être nul car si je saisis :
rien ne se passe le fichier test2.sql est identique au fichier test.sql
Je m'arrache les cheveux!!
sed "/^ /{s/.*/INSERT INTO matable1 (acti,mail) VALUES(1,'&');\n\ INSERT INTO matable2 (uid,tid) VALUES(LAST_INSERT_ID(),507);/}" test.sql > test2.sql
rien ne se passe le fichier test2.sql est identique au fichier test.sql
Je m'arrache les cheveux!!
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
16 juin 2009 à 15:09
16 juin 2009 à 15:09
Ben chez moi ça marche ;-\
jp@MDK:~/tmpfs ssh$ cat plop email ---------------------------------------------------- 33@mail.fr trmc@exemple.fr etc.. jp@MDK:~/tmpfs ssh$ sed "/^ /{s/.*/INSERT INTO matable1 (acti,mail) VALUES(1,'&');\n\ INSERT INTO matable2 (uid,tid) VALUES(LAST_INSERT_ID(),507);/}\ " plop > toto jp@MDK:~/tmpfs ssh$ cat toto email ---------------------------------------------------- INSERT INTO matable1 (acti,mail) VALUES(1,' 33@mail.fr'); INSERT INTO matable2 (uid,tid) VALUES(LAST_INSERT_ID(),507); INSERT INTO matable1 (acti,mail) VALUES(1,' trmc@exemple.fr'); INSERT INTO matable2 (uid,tid) VALUES(LAST_INSERT_ID(),507); etc.. jp@MDK:~/tmpfs ssh$;-\ ?