Forum Astuces.divers [Terminal] Substitution multi-ligne en sed

Posté par  .
Étiquettes : aucune
0
14
sept.
2004


Parfois on souhaite changer une chaîne de caractères de plusieurs mots dans un texte, et ceci en gardant des saut de lignes etc. Par exemple, s/je pense/nous pensons/g



La solution est d'utiliser les commandes N (rajoute une nouvelle ligne au buffer en cours), P (sort le buffer en cours jusqu'au premier retour chariot) et D (efface jusqu'au premier retour-chariot du buffer en cours):



sed -e '
N
s/je\([ \n]\{1,\}\)pense/nous\1pensons/g
P
D' input.txt > output.txt
  • # mais encore?

    Posté par  . Évalué à 1.

    Je ne comprend rien à l'astuce :(.
    Quelqu'un pourrait-il donner un jeu de données d'exemple?
    • [^] # Re: mais encore?

      Posté par  . Évalué à 1.

      bjr

      le N ajoute une ligne dans le buffer
      ensuite
      s/..../..../g c'est changer le texte
      \pour chaque caractere spécial ( par exemple
      \n = retour chariot
      P redonne le buffer
      D efface ce qui est avant le retour chariot.

      voir la page man de sed pour les détails.
      • [^] # Re: mais encore?

        Posté par  . Évalué à 1.

        Pour l'astuce il serait bon d'avoir un exemple de fichier avant puis après "l'astuce" que je n'ai pas compris non plus ...

Suivre le flux des commentaires

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