Bash : sed sur deux lignes consécutive

Bonjour,

Est ce possible d'appliquer la commande sed sur deux lignes consecutive ??
genre sed -e "s/motif_retour a la ligne_suite du motif/ motif de remplacement/g" fic1 >! fic2

Merci bien
Configuration: Windows Vista Internet Explorer 7.0

7 réponses

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    Ben a priori oui, vu que \n désigne un retour à la ligne (\r\n si c'est un fichier windowsien). Évidemment dans ton expression sed il faudra sûrement écrire \\n et \\r pour que ça fonctionne.

    Bonne chance
    1. Salut mamiemando,

      T'avais raison, c'est possible !

      j'ai cependant un ptit probleme

      j'execute cette commande

      sed '/subckt/{N;s/\(^subckt $3.*\)\n+/\1 /g}' fic1 > ! fic2

      et cela dans le but d'obtenir

      au depart:
      subckt SDFFSLRLD2 CLOCK DATA Q QB RL SL TE TI Q1B Q1
      + N_Q2_M13_s N_Q2B_M14_d

      resultat souhaité:

      subckt SDFFSLRLD2 CLOCK DATA Q QB RL SL TE TI Q1B Q1 N_Q2_M13_s N_Q2B_M14_d

      quand j'execute
      sed '/subckt/{N;s/\(^subckt SDFFSLRLD2.*\)\n+/\1 /g}' fic1 > ! fic2 ca marche
      mais quand je fais
      sed '/subckt/{N;s/\(^subckt $3.*\)\n+/\1 /g}' fic1 > ! fic2
      ca ne marche plus
      car en réaliité le texte SDFFSLRLD2 je le recois en parametre d'un script

      donc ma question , comment utiliser des variables a l'interieur des accolades {} ??

      Merci d'avance
      1. Salut,

        Merci, c'est ce que je cherchais , je vais eplucher ca

        Merci bcp
        1. Salut,

          J'ai lu ton lien mais ca ne réponds pas au cas des accolades.
          c'est poas grave , je vais chercher sur le net
          1. Modérateur
            Il faut sans doute échapper les accolades \{ \}.
            1. Modérateur
              Bizarre que ça ne marche pas pour toi ;-\
              [tmpfs]$ cat fic1
              subckt SDFFSLRLD2 CLOCK DATA Q QB RL SL TE TI Q1B Q1
              + N_Q2_M13_s N_Q2B_M14_d
              
              [tmpfs]$ sed '/subckt/{N;s/\(^subckt SDFFSLRLD2.*\)\n+/\1 /g}' fic1
              subckt SDFFSLRLD2 CLOCK DATA Q QB RL SL TE TI Q1B Q1  N_Q2_M13_s N_Q2B_M14_d
              
              [tmpfs]$ set SDFFSLRLD2
              
              [tmpfs]$ echo $1
              SDFFSLRLD2
              
              [tmpfs]$ sed "/subckt/{N;s/\(^subckt $1.*\)\n+/\1 /g}" fic1
              subckt SDFFSLRLD2 CLOCK DATA Q QB RL SL TE TI Q1B Q1  N_Q2_M13_s N_Q2B_M14_d
              
              [tmpfs]$

              mamiemando => Non il ne faut pas échapper les accolades, dans ce cas là elles font parties intégrantes de la syntaxe de sed, elles servent à regrouper des commandes qui ne s'appliquent qu'au motif les précédent.