Coller du texte au début avec sed/ed

Résolu
Little Black Cat -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

j'ai par exemple ce fichier:
donnee1
donnee2
donnee3
donnee a mettre au debut1
donnee a mettre au debut2
donnee a mettre au debut3
donnee4

et je veux mettre au début de mon fichier les 3 lignes ci-dessus.
Voilà ce que j'ai tenté, sans succès:
sed '/donnee a mettre au debut/! {H;d}; $G' fichier

Merci de m'aider à trouver la solution à ce petit problème
A voir également:

5 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

Est-ce que les données à mettre au début seront toujours 3 lignes consécutives ?
0
Little Black Cat
 
Merci pour la réponse rapide (comme toujours ;))

En fait ce fichier a été trié et les lignes à mettre au début sont consécutives et commence toutes par le même motif (popup). Leur nombre, quoique petit, est inconnu à priori, il peut y en avoir une, ou deux (c'est pour construire un menu).
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Re-

Un peu trop complexe en mettre en oeuvre avec "sed" (et je ne sais même pas si c'est possible d'ailleurs), donc on va faire avec "ed" qui intègre une fonction de déplacement :

jp@MDK:~/tmpfs ssh$ cat plop
donnee1
donnee2
donnee3
donnee a mettre au debut1
donnee a mettre au debut2
donnee a mettre au debut3
donnee4

jp@MDK:~/tmpfs ssh$ ed -s plop <<< $'v/debut/m$\nw'

jp@MDK:~/tmpfs ssh$ cat plop
donnee a mettre au debut1
donnee a mettre au debut2
donnee a mettre au debut3
donnee1
donnee2
donnee3
donnee4

jp@MDK:~/tmpfs ssh$


En gros, tout ce qui ne contient pas (v) le motif (/début/) est déplacé (m) en fin de fichier ($). On sauve le tout avec la commande "w".

;-))
0
Little Black Cat
 
Merci pour cette réponse.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Little Black Cat
 
>Un peu trop complexe en mettre en oeuvre avec "sed" (et je ne sais même pas si c'est possible d'ailleurs)

Si, si et voici comment:

#!/bin/sed -nf

:a
$!{/popup/ {p;bnext}
{1h;1!H}
:next
n
ba
}
{/popup/p
H
g
p
}


j'enregistre ce qui ne doit pas apparaître en début de fichier pour ne l'afficher qu'à la fin.
Il ne faut surtout pas utiliser la commande d sinon le fil des commandes n'est pas suivi.
On enregistre la 1ère ligne et on ajoute les suivantes (sinon une ligne vide apparaît quand on colle la 2ème partie du fichier).

Il est vrai que c'est un peu complexe. ;-)
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Chapeau bas et merci ;-))
0
Little Black Cat
 
Je suis sincèrement très honoré pour ce compliment de votre part. Merci ;-)
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Il n'y a pas de quoi ;-))
0