Forum Programmation.shell Prb avec ed

Posté par  .
Étiquettes : aucune
0
15
nov.
2004
Bonjour à tous !
J'ai créé un script en bash qui devrait (normalement !) ajouter des lignes après une certaine ligne.

je m'explique :
J'ai un fichier qui contient :
toto
titi
tata


Je voudrais après titi ajouter ceci :
tutu
tito


J'ai donc créé le script suivant :
	ed -s << STOP_ED >/dev/null
r ${FIC_MOODLE}
g/titi/s/titi/tutu^Mtito/g
w
q
STOP_ED


Mais ça marche pô ! :(
Enfin si, si je le fais à la main, mais pas dans un script.

Ca fait plusieurs heure que je suis dessus et je devient :pt1cable:

Comment faire ????
  • # une piste

    Posté par  (site web personnel) . Évalué à 2.

    #!/bin/sh
    # script ajoute.sh
    # usage : ajoute.sh nomDuFichier
    # effet : ajoute les ligne "tutu" et "tito" apres les lignes "titi"
    sed -e 's/titi/titi^Mtutu^Mtito/g' < $1 >tmp_sed
    mv tmp_sed $1
    • [^] # Re: une piste

      Posté par  . Évalué à 1.

      Ca marche pas, pourant le $? m'indique que tout se termine bien après le sed.
      • [^] # Re: une piste

        Posté par  (site web personnel) . Évalué à 2.

        Ba le seul truc dans mon script c'est les retour a la ligne (pas sur du tout pour le ^M) mais le reste devrais est bon.
        • [^] # Re: une piste

          Posté par  . Évalué à 2.

          pour le ^m, taper ctrl+v ctrl+m dans l'expression du sed
          • [^] # Re: une piste

            Posté par  . Évalué à 1.

            Je suis d'accord si tu es dans bash, mais j'édite mon fichier avec Kate et là ça passe plus .
        • [^] # Re: une piste

          Posté par  (site web personnel) . Évalué à 2.

          Ca y est chez moi ca marche

          #!/bin/sh
          # script ajoute.sh
          # usage : ajoute.sh nomDuFichier
          # effet : ajoute les ligne "tutu" et "tito" apres les lignes "titi"
          sed -e 's/titi/titi\
          tutu\
          tito/g' < $1 >tmp_sed
          mv tmp_sed $1

          On notera bien le retour a la ligne apres les "\" dans la "ligne" de la commande sed
          • [^] # Re: une piste

            Posté par  . Évalué à 1.

            Effectivement ça marche !!!!!!

            Mais j'ai un autre soucis du coup (snif ! je vais pô m"en sortir !)

            Voici une ligne d'un fichier :
            <?PHP print_footer('home'); ?>

            Tout est sur une ligne.

            Voici ce que j'obtient :
            <?PHP print_footer('home'); ?>
            require_once "$CFG->dirxoops/footer.php";

            Or je voudrais obtenir ceci :
            <?PHP print_footer('home');
            require_once "$CFG->dirxoops/footer.php"; ?>

            Le tout c'est que ?> soit après ce que j'ajoute (sur la même ligne ou après peu importe) sinon c'est pas pris en compte pour Apache et ya erreur.
            • [^] # Re: une piste

              Posté par  . Évalué à 1.

              Laisse tomber, y'a q'un seul fichier dans ce cas, je vais mettre un warning à la fin du traitement .

              Merci de ton aide !!!
      • [^] # Re: une piste

        Posté par  . Évalué à 1.

        Voici la ligne exacte que j'utilise dans mon script :

        sed -e 's/print_footer('home');/print_footer('home');require_once \"\$CFG-\>dirxoops/footer.php\";/g' < ${FIC_MOODLE} >${REP_OLD}/tmp_sed
        • [^] # Re: une piste

          Posté par  . Évalué à 1.

          C'était sans le ^M, mais avec :

          sed -e 's/print_footer('home');/print_footer('home');^Mrequire_once \"\$CFG-\>dirxoops/footer.php\";/g' < ${FIC_MOODLE} >${REP_OLD}/tmp_sed
  • # Autre moyens ????

    Posté par  . Évalué à 1.

    Sinon y'a un autre moyen ????????????????

    Je plane completement...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.