[gull] sed et newline

Claude Paroz paroz at email.ch
Wed Nov 30 21:51:42 CET 2005


Le mercredi 30 novembre 2005 à 10:44 +0100, Julien Linder a écrit :
> 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 :)

Ouaip, je dirais même plus, ça joue \o/

Un grand merci à toi et à tous ceux qui ont essayé de m'aider.

Claude




More information about the gull mailing list