[sed] supprimer \n sur un nombre indéterminé de lignes consécutives

supprimer \n sur un nombre indéterminé de lignes consécutives [sed] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 11-04-2013 à 19:54:23    

Bonjour à vous
 
Je butte actuellement sur un petit problème avec sed
Voici ce que j'aimerais faire. J'ai un fichier où certaines lignes sont terminées par un \ (et éventuellement des espaces après) pour indiquer que la ligne n'est pas terminée en fait. J'aimerais regrouper ces lignes sur une seule ligne dans un fichier. Exemple :
 

key1 = val1
key2 = val2
key3 = val3a \
       val3b \
       val3c
key4 = val4

         
 
et j'aimerais obtenir un truc du style
 

key1 = val1
key2 = val2
key3 = val3a val3b val3c
key4 = val4

         
 
bien sur, rien n'est prédictif dans tout ça (combien de lignes consécutives à concaténer par exemple)
 
j'étais parti sur un truc simple qui fonctionne avec vi notamment:

s/\\\s*\n/ /


sauf que le \n est viré du buffer de sed au moment du pattern matching
donc ça marche bien avec vi, mais pas avec sed
 
J'ai bien vu des débuts de réponses avec la concaténation de ligne suivante (N;s....), mais j'arrive pas à trouver comment le faire pour certaines lignes et pas d'autres (en gros je peux le faire sur tout le fichier, sur deux lignes consécutives, mais pas sur x lignes consécutives)
 
alors certes, j'ai d'autres façons de faire, mais ma curiosité me pousse à essayer de trouver une solution élégante pour ça
 
merci pour votre aide


---------------
LE topic à lire
Reply

Marsh Posté le 11-04-2013 à 19:54:23   

Reply

Marsh Posté le 12-04-2013 à 14:33:17    

Quelque chose comme :

sed -e :a -e '/\\$/N; s/\\\n//; ta'


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 15-04-2013 à 11:51:31    

Xavier_OM a écrit :

Quelque chose comme :

sed -e :a -e '/\\$/N; s/\\\n//; ta'



c'est presque ce que j'ai fini par faire
en fait, j'ai obtenu ce que je voulais avec

sed -e 's/^\s*//' monfichier |sed -e ':a;N;s/\\\s*\n/ /;ta' > result


---------------
LE topic à lire
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed