Rechercher : dans
Par :

Déplacer une ligne avec Sed

Dernière réponse le 2 mai 2008 à 16:27:16 ksalt, le 2 mai 2008 à 10:39:44 
 Signaler ce message aux modérateurs

Bonjour,

Malgré de nombreux essais, je ne parviens pas à déplacer une ligne dans un fichier texte avec sed.
Exemple de contenu du fichier texte :

aa
bb
cc
dd
ee
ff
ccc
gg

Je voudrais tout simplement déplacer la ligne n° 7 ('ccc') après la ligne n° 3 ('cc'). Je recherche une commande équivalente à la commande ex 'vim' :7m3.

Merci par avance.

Meilleures réponses pour « Déplacer une ligne avec Sed » dans :
Sed - Supprimer une ou plusieurs lignes d'un fichier Voir Supprimer une (ou plusieurs) ligne(s) d'un fichier Syntaxe sed '{[/]||[/]}d' sed '{[/][,][/]d' /.../ = délimiteurs n = le numéro de ligne chaîne = la chaîne contenue dans la...
Sed - Numérotation de lignes Voir Numérotation * Numéroter les lignes (équivalent à "cat -n fichier.txt") sed = fichier.txt L'inconvénient c'est que l'affichage se fait sur 2 lignes. Donc pour palier à ce petit "défaut" sed = fichier.txt | sed 'N;s/\n/\t/' Numéroter les...
Sed - Introduction à SED - Part III VoirSED - The Stream EDitor - Part III Ce document est une introduction à la pratique et à l'utilisation de l'éditeur de flux "SED", qui essaie de couvrir certaines fonctionnalités assez méconnues, pour ne pas dire "quasi inconnues", qui font de "SED"...
Sed - Trucs et astuces VoirSubstitution Affichage Suppression Espace et tabulation Ligne vide Intervalle régulier Divers Joindre des lignes Affichage insensible à la casse Substitution Substituer "foo" par "bar" à chaque ligne Seulement la 1ère...
Sed - Insertion de texte VoirInsérer du texte dans un fichier Introduction Syntaxe Ajout de texte Insérer une ligne avec "i" Ajouter une ligne avec "a" Échanger une ligne avec "c" Introduction Il est parfois utile de pouvoir insérer du texte en en-tête d'un ou...
Introduction aux courants porteurs en ligne (CPL) VoirIntroduction aux CPL On retient sous l'appellation CPL « Courants Porteurs en Ligne » toute technologie qui vise à faire passer de l'information à bas débit ou haut débit sur les lignes électriques en utilisant des techniques de modulation...
Publicité en ligne VoirIntroduction à la publicité en ligne La publicité en ligne est un moyen permettant aux webmasters de rentabiliser financièrement leur site internet et de leur permettre de couvrir les coûts d'hébergement et de noms de domaine. Il s'agit également...
Les lignes louées (T1, T2, T3) VoirLes lignes louées On appelle lignes "louées" des lignes spécialisées (notées parfois LS) qui permettent la transmission de données à moyens et hauts débits (64 Kbps à 140 Mbps) en liaison point à point ou multipoints (service Transfix). En Europe,...

1

dieu, le 2 mai 2008 à 14:12:54

Puisque tu connais vi pourquoi faire avec sed ? A moins que tu ignores encore que toute commande qui a des commandes internes est scriptable sous tous les unix ....

la methode de scriptage avec vi se fait par la commande vi -c "corp du script" fichier_à_traiter

exemple :

SIUNIXS2:root # cat > /tmp/FP
aa
bb
cc
dd
ee
ff
ccc
gg
SIUNIXS2:root #
SIUNIXS2:root # vi -c "7m 3|:wq" /tmp/FP
"/tmp/FP" 8 lignes, 25 caractères. "/tmp/FP" 8 lignes, 25 caractères.
SIUNIXS2:root # cat /tmp/FP
aa
bb
cc
ccc
dd
ee
ff
gg
SIUNIXS2:root #

Répondre à dieu

2

dieu, le 2 mai 2008 à 14:17:14

Moving a line to the start of the file
EG
something1 this
something2 ====> something1
this something2
something3 something3

sed -n '
/this/!H # if no match append to hold space
/this/{x; H; } # found so exhange and append (prepend)
${g; s/\n//; p; }' <infile # if last line get and print hold
OR
sed '1,/this/{ # until found
/this/!{H; d; } # if not it put in hold (no print)
G; s-\n--; }' infile # output hold - continue print with the rest


voilà la solution sed tirée de mon truc & astuces. suffit d'ajouter le forçage de numero de ligne pour placer la ligne coupé ou tu veux .

Répondre à dieu

3

 ksalt, le 2 mai 2008 à 16:27:16

Grand merci de tes réponses.

1°) La référence à 'vi' que j'évoquais dans mon message était un exemple, simple, de ce que je veux effectuer. Mais je souhaite utiliser 'sed' car j'ai d'autres commandes (lesquelles fonctionnent parfaitement) de cet éditeur à mettre en oeuvre sur le fichier en entrée.

2°) Peux-tu expliciter la (les) procédure(s) de ton second message, en prenant pour référence les numéros de ligne du fichier en entrée. Désolé, mais je dois te dire que les essais effectués n'aboutissent pas afin d'obtenir exactement en sortie la séquence :
aa
bb
cc
ccc
dd
ee
ff
gg

Je te remercie de nouveau par avance.

Répondre à ksalt