Déplacer une ligne avec Sed
Fermé
ksalt
Messages postés
2
Date d'inscription
vendredi 2 mai 2008
Statut
Membre
Dernière intervention
2 mai 2008
-
2 mai 2008 à 10:39
ksalt Messages postés 2 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 2 mai 2008 - 2 mai 2008 à 16:27
ksalt Messages postés 2 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 2 mai 2008 - 2 mai 2008 à 16:27
A voir également:
- Déplacer une ligne avec Sed
- Déplacer une colonne excel - Guide
- Aller à la ligne excel - Guide
- Site de vente en ligne particulier - Guide
- Partager photos en ligne - Guide
- Apparaitre hors ligne instagram - Guide
2 réponses
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 #
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 #
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 .
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 .
ksalt
Messages postés
2
Date d'inscription
vendredi 2 mai 2008
Statut
Membre
Dernière intervention
2 mai 2008
2 mai 2008 à 16:27
2 mai 2008 à 16:27
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.
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.