#1 Le 22/09/2010, à 09:01
- survietamine
[resolu] [shell] [awk] remplacer des blocs de texte (paragraphes)
bonjour,
si un expert a un moment à me consacrer, voici mon problème.
soit des paragraphes (config de SYMPA) qui ressemblent à ceci :
owner
reception mail
profile privileged
email listmaster@ml.monsite.tldowner
reception mail
profile privileged
email bigboss@monsite.tld
gecos The Big BOSSowner
reception mail
profile normal
email jean.cadre@monsite.tld
gecos Jean CADRE
Je souhaite :
- supprimer cette partie dans les fichiers de configuration d'une centaine de listes (correspondant aux départements Français)
Cette partie est variable, chaque liste départementale a un ou plusieurs owner(s) non privilégié(s) puisqu'ils gèrent chacun des secteurs géographiques.
Donc, il faudrait utiliser des expressions régulières.
- Une constante toutefois, ces blocs précèdent toujours une ligne contenant le mot 'archive' seul.
- remplacer ce bloc par un nouveau qui contient tous les responsables de secteurs.
Ceci parce qu'ils sont en pleine réorganisation et c'est apparemment le plus simple.
Donc, voilà, si vous avez une recommandation particulière avec awk, sed ou autre et des exemples, ça m'intéresse bien.
Avec awk, j'arrive à afficher les blocs concernés avec :
awk '/^owner/,/^$/' fichier_de_config
ou
awk '/^owner/,/^archive/' fichier_de_config
donc, en gros je veux substituer mon texte à la place de ce qui est "matched" par cette regexp.
J'ai fait quelques essais avec gsub(), mais je ne suis vraiment pas doué :\
Merci de votre contribution et bonne journée.
Dernière modification par survietamine (Le 22/09/2010, à 15:01)
Ðɸ Ƴơц ℕεєđ Şø₥€ √іêŤąɱίɳƸʂ ?
Hors ligne
#2 Le 22/09/2010, à 11:57
- survietamine
Re : [resolu] [shell] [awk] remplacer des blocs de texte (paragraphes)
Mon problème avec awk est ici :
ml:/var/lib/sympa/expl# awk '{ gsub(/^owner/,/^$/, "TOTO"); print }' ml.78/config
awk: line 1: syntax error at or near TOTO
ml:/var/lib/sympa/expl# awk '{ gsub((/^owner/,/^$/), "TOTO"); print }' ml.78/config
awk: line 1: syntax error at or near ,'
Dernière modification par survietamine (Le 22/09/2010, à 12:00)
Ðɸ Ƴơц ℕεєđ Şø₥€ √іêŤąɱίɳƸʂ ?
Hors ligne
#3 Le 22/09/2010, à 12:33
- AnsuzPeorth
Re : [resolu] [shell] [awk] remplacer des blocs de texte (paragraphes)
Bjr,
Avec sed: tout ce qui est entre owner et archive sera remplacé par 'mon texte' (il peut contenir des sauts de lignes)
sed '/^owner/,/^archive/c mon texte' fichier.txt
une petite doc : http://www.commentcamarche.net/faq/9536 … sed-part-i
Dernière modification par AnsuzPeorth (Le 22/09/2010, à 12:34)
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#4 Le 22/09/2010, à 13:35
- survietamine
Re : [resolu] [shell] [awk] remplacer des blocs de texte (paragraphes)
merci beaucoup AnsuzPeorth !
Je crois que j'utilise à outrance la substitution avec sed (s/pattern/new_text/) et je m'étais retrouvé bloqué dessus.
Si j'ai compris, la différence, c'est que l'option 'c' permet le remplacement multilignes.
Dernière modification par survietamine (Le 22/09/2010, à 13:50)
Ðɸ Ƴơц ℕεєđ Şø₥€ √іêŤąɱίɳƸʂ ?
Hors ligne
#5 Le 22/09/2010, à 14:32
- AnsuzPeorth
Re : [resolu] [shell] [awk] remplacer des blocs de texte (paragraphes)
Si j'ai compris, la différence, c'est que l'option 'c' permet le remplacement multilignes.
Jette un oeil au lien que j'ai posté, c'est mieux expliqué que je ne serais le faire
Si le problème est réglé, passe le sujet en [Résolu]
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#6 Le 23/09/2010, à 22:18
- sputnick
Re : [resolu] [shell] [awk] remplacer des blocs de texte (paragraphes)
une petite doc : http://www.commentcamarche.net/faq/9536 … sed-part-i
C'est bien la première fois que je voit une doc si bien ficelée sur ce site oO
Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver.
https://sputnick.fr
Hors ligne