添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • » Forum
  • » Développement et programmation
  • » [resolu] [shell] [awk] remplacer des blocs de texte (paragraphes)
  • [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 [email protected]

    owner
    reception mail
    profile privileged
    email [email protected]
    gecos The Big BOSS

    owner
    reception mail
    profile normal
    email [email protected]
    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
    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)


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

    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)


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

    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)

    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)


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

    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)

    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/