SED: copier/coller plusieurs lignes

Fermé
Greg - 25 janv. 2010 à 16:53
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 12 oct. 2010 à 19:17
Bonjour,

un truc tout bete a faire mais je n'arrive pas a trouver:
comment copier plusieurs lignes et les coller a un autre endroit dans le fichier ? Tout ca en utilisant SED (de preference) et en effectuant la meme action sur plusieurs fichiers a la fois.

Merci d'avance !

Greg

8 réponses

Merci pour ton exemple tres clair jipicy !

Si je comprends bien, "3N" permet de lire la 3eme ligne et la ligne suivante, "h" copie en memoire et ensuite "4G" colle ce qui a ete copie apres la 4eme ligne.

Comment faire maintenant si je veux copier un bloc de plusieurs lignes et pas seulement 2 lignes ? J'ai essaye de jouer avec la commande "N" mais en vain.... et la lecture du manuel de sed ne m'eclaire pas plus...

Encore merci !
1
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
26 janv. 2010 à 09:18
Comment faire maintenant si je veux copier un bloc de plusieurs lignes et pas seulement 2 lignes ? J'ai essaye de jouer avec la commande "N" mais en vain.... et la lecture du manuel de sed ne m'eclaire pas plus...
D'où ma demande d'exemple concret, à chaque cas sa syntaxe (même si des syntaxes généralistes peuvent être appliquées) ;-((

Pour généraliser, il faut ajouter chaque ligne suivante en testant l'existence (ou pas, ça dépend des cas) d'un motif dans la dernière ligne à prendre en compte, à l'aide d'une boucle...

Voir :
Introduction à Sed - Part I
Introduction à Sed - Part II
Introduction à Sed - Part III
1
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
25 janv. 2010 à 16:56
Salut,

Exemple AVANT => APRES, merci ;-)
0
salut svp aider moi c urgent
j'ai un fichier ou j'ai plusieurs lignes
je voulais utiliser awk ou sed pour copier des lignes et les coller dans la ligne précédente par exemple
*A340/redft/zyfzhns/gtuizpoak/gzhjez/AMAL
/NCEN/SFRE/234f.kdv/
/KZUEOKZ/Z;HDIO/
/NU=572
*A340/redft/zyfzhns/gtuizpoak/gzhjez/AMAL
/NCEN/SFRE/234f.kdv/
/KZUEOKZ/Z;HDIO/
/NU=572
suivant
suivant
............

maintenant je voudrais avoir au finish
*A340/redft/zyfzhns/gtuizpoak/gzhjez/AMAL /NCEN/SFRE/234f.kdv//KZUEOKZ/Z;HDIO//NU=572
*A340/redft/zyfzhns/gtuizpoak/gzhjez/AMAL /NCEN/SFRE/234f.kdv//KZUEOKZ/Z;HDIO//NU=572


est ce que quelqu'un peut m'aider svp
truc urgent
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 897
12 oct. 2010 à 18:23
Salut,

Si c'est toujours le même schéma (1 ligne commençant par * suivie de 3 lignes), cette syntaxe devrait faire l'affaire :

sed '/^\*/N;N;N;s/\n//g'
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 897
12 oct. 2010 à 19:17
Et si ce n'est pas le même schéma et que le nombre de lignes suivantes est inconnu, cette syntaxe là devrait aller...

sed ':z;/^\*/N;/\n\*/!s/\n//;tz;P;D'
0
Desole mais je seche completement, c'est pour cela que je n'ai propose aucune solution. Je me doute qu'il faut utiliser les commandes H et G de sed, mais aucune idee comment...
Quelqu'un aurait-il un tuyau a me donner ? Merci d'avance !
0

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

Posez votre question
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
25 janv. 2010 à 20:38
Non, je te demande un exemple concret de fichier à modifier.
0
Ok, desole j'avais mal compris ;)

Voici donc le contenu ultra-simplifie d'un fichier avant et apres le copier-coller que j'aimerais effectuer. Les lignes 3 et 4 ont ete dupliquees.

Fichier initial:

aaaaaaa
bbbbbbb
cccccccc
ddddddd
eeeeeee

Fichier apres copier/coller:

aaaaaaa
bbbbbbb
cccccccc
ddddddd
cccccccc
ddddddd
eeeeeee

Il s'agit toutefois de realiser ce copier-coller sur une multitude de fichiers simultanement (les lignes a copier-coller sont toujours au meme endroit dans les differents fichiers).

Merci pour ton aide jipicy !
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 897
25 janv. 2010 à 22:24
[tmpfs]$ cat plop bar foo
aaaaaaa
bbbbbbb
cccccccc
ddddddd
eeeeeee

aaaaaaa
bbbbbbb
cccccccc
ddddddd
eeeeeee

aaaaaaa
bbbbbbb
cccccccc
ddddddd
eeeeeee

[tmpfs]$ sed -s -i.bak '3N;h;4G' *

[tmpfs]$ cat plop bar foo
aaaaaaa
bbbbbbb
cccccccc
ddddddd
cccccccc
ddddddd
eeeeeee

aaaaaaa
bbbbbbb
cccccccc
ddddddd
cccccccc
ddddddd
eeeeeee

aaaaaaa
bbbbbbb
cccccccc
ddddddd
cccccccc
ddddddd
eeeeeee

[tmpfs]$  

;-))
0
Ok merci pour le tuyau, c'est vraiment sympa ! Je vais me plonger dans cette intriduction a Sed, j'ai encore pas mal a apprendre ;)

Bonne journee !
0