Remplacer du texte en boucle....
Résolu/Fermé
AlexMac
-
28 oct. 2011 à 10:34
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 31 oct. 2011 à 11:18
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 31 oct. 2011 à 11:18
A voir également:
- Remplacer du texte en boucle....
- Transcription audio en texte word gratuit - Guide
- Remplacer disque dur par ssd - Guide
- Remplacer word - Guide
- Excel cellule couleur si condition texte - Guide
- Mettre un texte en majuscule - Guide
5 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
28 oct. 2011 à 11:58
28 oct. 2011 à 11:58
Salut,
;-))
$ echo ")(())((()))(()))" | sed ':z;s/()//;tz' )) $
;-))
Franzux
Messages postés
8907
Date d'inscription
mercredi 5 décembre 2007
Statut
Contributeur
Dernière intervention
27 octobre 2015
1 145
28 oct. 2011 à 12:13
28 oct. 2011 à 12:13
Soit dans une boucle :
Bon courage ;)
franzux@maerix:~/test/parenthese$ for i in 'ls *.txt';do echo ${i};cat ${i};done parentheses1.txt )(())((()))(())) parentheses2.txt )(())((()))(())))(())((()))(())) )(())((()))(())) parentheses3.txt )(())((()))(())) )(())((()))(())) )(())((()))(())) )(())((()))(())) )(())((()))(())) )(())((()))(())) )(())((()))(())) )(())((()))(())) )(())((()))(())) )(())((()))(())) )(())((()))(())) franzux@maerix:~/test/parenthese$ cat script.sh #!/bin/bash for file in *.txt do echo "Traitement de ${file}..." sed -i ':z;s/()//;tz' ${file} done franzux@maerix:~/test/parenthese$ ./script.sh Traitement de parentheses1.txt... Traitement de parentheses2.txt... Traitement de parentheses3.txt... franzux@maerix:~/test/parenthese$ for i in 'ls *.txt';do echo ${i};cat ${i};done parentheses1.txt )) parentheses2.txt )))) )) parentheses3.txt )) )) )) )) )) )) )) )) )) )) ))
Bon courage ;)
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
28 oct. 2011 à 12:21
28 oct. 2011 à 12:21
Salut,
Y'a des courageux ;-))
;-))
Y'a des courageux ;-))
$ ls fic1 fic2 fic3 $ cat fic1 )(())((()))(())) $ cat fic2 )(())((()))(())))(())((()))(())) )(())((()))(())) $ cat fic3 )(())((()))(())) )(())((()))(())) )(())((()))(())) )(())((()))(())) )(())((()))(())) )(())((()))(())) )(())((()))(())) )(())((()))(())) )(())((()))(())) )(())((()))(())) )(())((()))(())) $ sed -si.bak ':z;s/()//;tz' fic* $ ls fic1 fic1.bak fic2 fic2.bak fic3 fic3.bak $ cat fic1 )) $ cat fic2 )))) )) $ cat fic3 )) )) )) )) )) )) )) )) )) )) )) $
;-))
OK merci à tous pour vos réponses.
Ce week-end je n'ai pas accès a mon ordi.
J'essaie tout ça lundi et je vous tiens au courant.
Merci beaucoup
Alexandre
Ce week-end je n'ai pas accès a mon ordi.
J'essaie tout ça lundi et je vous tiens au courant.
Merci beaucoup
Alexandre
Youpiiii, ma journee commence super bien !
Ca fonctionne avec sed -i
Et merci pour l'astuce du sed -si.bak. Comme ca je peux garder mon fichier original.
Ce serait super sympa si vous pouviez m'expliquer un peu comment fonctionne ce script : je ne comprends pas le :z;....;tz
Merci beucoup
Alexandre
Ca fonctionne avec sed -i
Et merci pour l'astuce du sed -si.bak. Comme ca je peux garder mon fichier original.
Ce serait super sympa si vous pouviez m'expliquer un peu comment fonctionne ce script : je ne comprends pas le :z;....;tz
Merci beucoup
Alexandre
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
31 oct. 2011 à 09:32
31 oct. 2011 à 09:32
:z
Étiquette. On définit une étiquette afin de s'y brancher dessus et de pouvoir faire une boucle. On peut l'appeler comme on veut (:boucle ou :toto etc.).
tz
La commande "t" est une commande de branchement conditionnel et permet de se brancher sur l'étiquette définie, si et seulement si la commande de substitution précédente a réussi.
Il existe d'autres commandes de branchement, notamment la commande "b" qui elle est une commande de branchement inconditionnel.
il y a aussi la commande "T", qui à l'instar de son homologue "t", n'effectue un branchement sur l'étiquette pointée, que si la commande précédente a échoué.
-s
Permet de prendre en compte chaque fichier passé en argument individuellement. Si on omet ce paramètre et dans le cas de plusieurs fichiers donnés en argument, "sed" traite l'ensemble de ces fichiers comme un seul et unique flux de données.
Pour davantage de précisions sur ces commandes, voir la FAQ sur SED
;-))
Étiquette. On définit une étiquette afin de s'y brancher dessus et de pouvoir faire une boucle. On peut l'appeler comme on veut (:boucle ou :toto etc.).
tz
La commande "t" est une commande de branchement conditionnel et permet de se brancher sur l'étiquette définie, si et seulement si la commande de substitution précédente a réussi.
Il existe d'autres commandes de branchement, notamment la commande "b" qui elle est une commande de branchement inconditionnel.
il y a aussi la commande "T", qui à l'instar de son homologue "t", n'effectue un branchement sur l'étiquette pointée, que si la commande précédente a échoué.
-s
Permet de prendre en compte chaque fichier passé en argument individuellement. Si on omet ce paramètre et dans le cas de plusieurs fichiers donnés en argument, "sed" traite l'ensemble de ces fichiers comme un seul et unique flux de données.
Pour davantage de précisions sur ces commandes, voir la FAQ sur SED
;-))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
Modifié par lami20j le 31/10/2011 à 10:59
Modifié par lami20j le 31/10/2011 à 10:59
Salut,
lami20j
:~$ echo ")(())((()))(()))" | sed 's/.*\(..\)$/\1/' )) :~$ echo ")(())((()))(()))" | sed 's/[()]*\(..\)$/\1/' ))
lami20j
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
31 oct. 2011 à 11:10
31 oct. 2011 à 11:10
Salut,
Oui mais ça ne tient pas compte de la demande initiale, à savoir "je voudrais éliminer tous les couples () de telle sorte qu'a la fin il ne me reste que : )) ", ce n'est pas un nombre défini qu'il faut avoir, mais toutes les parenthèses orphelines...
Donc si on rajoute une ")" à la fin (ou ailleurs), voilà ce que ça donne :
;-))
Oui mais ça ne tient pas compte de la demande initiale, à savoir "je voudrais éliminer tous les couples () de telle sorte qu'a la fin il ne me reste que : )) ", ce n'est pas un nombre défini qu'il faut avoir, mais toutes les parenthèses orphelines...
Donc si on rajoute une ")" à la fin (ou ailleurs), voilà ce que ça donne :
$ echo ")(())((()))(())))" | sed 's/.*\(..\)$/\1/' )) $ echo ")(())((()))(())))" | sed ':z;s/()//;tz' ))) $
;-))
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
31 oct. 2011 à 11:18
31 oct. 2011 à 11:18
Oups, j'ai mal compris. Tu as raison ;-)
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
31 oct. 2011 à 11:18
31 oct. 2011 à 11:18
Pas de souci, ça peut toujours servir ;-))