Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/09/2010, à 10: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.tld

owner
reception mail
profile privileged
email bigboss@monsite.tld
gecos The Big BOSS

owner
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, à 16:01)


Ðɸ Ƴơц ℕεєđ Şø₥€ √іêŤąɱίɳƸʂ ?

Hors ligne

#2 Le 22/09/2010, à 12: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, à 13:00)


Ðɸ Ƴơц ℕεєđ Şø₥€ √іêŤąɱίɳƸʂ ?

Hors ligne

#3 Le 22/09/2010, à 13: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, à 13: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, à 14:35

survietamine

Re : [resolu] [shell] [awk] remplacer des blocs de texte (paragraphes)

merci beaucoup AnsuzPeorth ! smile

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, à 14:50)


Ðɸ Ƴơц ℕεєđ Şø₥€ √іêŤąɱίɳƸʂ ?

Hors ligne

#5 Le 22/09/2010, à 15:32

AnsuzPeorth

Re : [resolu] [shell] [awk] remplacer des blocs de texte (paragraphes)

survietamine a écrit :

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 wink

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, à 23:18

sputnick

Re : [resolu] [shell] [awk] remplacer des blocs de texte (paragraphes)

AnsuzPeorth a écrit :

C'est bien la première fois que je voit une doc si bien ficelée sur ce site oO


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne