[gull] sed et newline

Julien Linder julien.linder at bytec.ch
Wed Nov 30 10:44:17 CET 2005


Claude Paroz wrote:
> J'ai un petit soucis avec un "bête" rechercher-remplacer dans un
> fichier. J'ai besoin de remplacer la séquence newline suivi d'un ">" par
> un simple ">".
> 
> Dans ma grande naïveté, j'espérais qu'un simple :
> sed 's/\n>/>/g' monfichier
> ferait l'affaire. Mais ça aurait été trop facile :-P
> 
> Quelque peut-il me mettre sur la bonne voie ? Je précise que c'est à
> placer dans un script bash.
> 


Bon alors j'ai une solution pour vous, mais je ne prétends
pas du tout être un pro de "sed", donc il y a probablement
une solution plus élégante.

Effectivement, sed traite un document ligne par ligne. Il
existe trois commandes, N, D et P qui permettent de faire
du traitement multi-lignes. C'est de ce côté là qu'il
faut chercher.

Le script que je vous présente fait la chose suivante :

  (1) lire la ligne suivante et l'ajouter à la mémoire tampon
  (2) tenter de remplacer "\n>" par ">"
  (3) si la substitution joue, on retourne en (1), sinon
      on continue vers (4)
  (4) afficher la portion de la ligne en mémoire qui va
      jusqu'au premier "\n"
  (5) effacer la portion de la ligne en mémoire qui va
      jusqu'au premier "\n" et aller à (1)


Et voici le script :

  :begin
  N
  s/\n>/>/g
  tbegin
  P
  D


Placez ces lignes dans un fichier, disons monscript.sed,
puis dans votre script bash vous utilisez :

  sed -f monscript.sed monfichier


J'ai brièvement testé, ça devrait jouer :)


    Julien








More information about the gull mailing list