Coller du texte au début avec sed/ed

Résolu/Fermé
Little Black Cat - Modifié par jipicy le 4/05/2010 à 15:08
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 6 mai 2010 à 09:15
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

5 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
4 mai 2010 à 09:12
Salut,

Est-ce que les données à mettre au début seront toujours 3 lignes consécutives ?
0
Little Black Cat
4 mai 2010 à 09:25
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
4 mai 2010 à 10:42
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
Merci pour cette réponse.
0

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

Posez votre question
Little Black Cat
5 mai 2010 à 05:30
>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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
5 mai 2010 à 10:12
Chapeau bas et merci ;-))
0
Little Black Cat
6 mai 2010 à 08:39
Je suis sincèrement très honoré pour ce compliment de votre part. Merci ;-)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
6 mai 2010 à 09:15
Il n'y a pas de quoi ;-))
0