Insertion sed

Fermé
romzzzz - Modifié par romzzzz le 26/08/2010 à 10:31
dubcek Messages postés 18722 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 9 mai 2024 - 26 août 2010 à 14:34
Bonjour,

j'aimerai savoir s'il existe une commande sed qui permet d'insérer un texte à
partir de la xième occurrence d'un motif ?

Par exemple (sur l'excellent tutoriel de jipicy) on a :

sed "/Conclusion/i\Notes : La négation s'obtient avec un point d'exclamation ! \n" fichier.txt

qui va insérer le texte "La négation s'obtient avec un point d'exclamation ! \n" à chaque fois que le motif "Conclusion" sera rencontré.

Or dans mon cas je voudrai seulement insérer ce texte à partir de la 2ème ou 3ème fois que le motif apparait !

Il est d'ailleurs laissé entendre ici (tuto de jipicy) que c'est possible :) :

sed "/global/c Divers paramètres peuvent être passer en fin d'expression, comme par exemple le paramètre \"g\" (pour global), pour une substitution globale de chaque occurrence" fichier.txt

J'ai essayé plusieurs possibilités comme :
sed "/Conclusion/i\Notes : La négation s'obtient avec un point d'exclamation ! \n/2" fichier.txt
mais sans succès.

Merci pour l'aide !


9 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
26 août 2010 à 11:07
Salut,

Tout dépend si par énième occurrence tu entends énième occurrence d'une ligne ou énième occurrence d'un texte ;-\

Par ligne il n'y a pas de problème, pour la énième occurrence d'un texte là c'est autre chose et peut être pas possible ;-(
0
Je pensai à l'occurrence d'un motif texte oui...

Une solution possible est d'insérer volontairement le même motif aux endroits que je souhaite puis de faire des substitutions ciblées (qui elles sont possibles), mais c'est un peu tordu ! :)
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
26 août 2010 à 11:26
Donne un exemple précis de ce que tu voudrais exactement...
0
Fichier de départ :

ZEVTRECU

CONT 000 00 00 00 3D 00 0D 00 3D 01 00 00 00 00 00 00 00 ...=...=........
010 6E 00 0A 00 F0 00 80 00 FF FF 7E 7E 15 00 81 FF n.........~~....
020 FF FF 00 00 06 02 7E 00 00 14 58 E9 30 01 00 00 ......~...X.0...
030 76 00 6C 00 6C E0 03 00 00 00 00 00 00 00 98 01 v.l.l...........
040 00 02 01 00 00 00 FF 7E 7E 7E 7E 7E 00 00 C8 5D .......~~~~~...]
050 6E 00 01 00 00 00 00 00 7E 7E 7E 7E 15 29 04 00 n.......~~~~.)..
060 F4 5F 2F 82 00 00 00 00 FF FF FF FF 00 05 57 00 ._/...........W.
ZCTXCOUR
CONT 070 05 .
ZCTXENV

ZEVTRECU

CONT 000 00 00 00 3D 00 0D 00 3D 01 00 00 00 00 00 00 00 ...=...=........
010 00 00 00 00 F0 00 80 00 FF FF 7E 7E 15 00 81 FF ..........~~....
020 FF FF 00 00 06 02 7E 00 00 CC 33 01 43 01 00 00 ......~...3.C...
030 76 00 6C 00 6C E0 03 00 00 00 00 00 00 00 98 01 v.l.l...........
040 00 02 01 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E ...~~~~~~~~~~~~~
050 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 29 04 7E ~~~~~~~~~~~~~).~
060 7E 7E 2F 82 00 00 00 00 FF FF FF FF 00 01 61 61 ~~/...........aa
ZCTXCOUR
CONT 070 05 .
ZCTXENV

ZEVTRECU

CONT 000 00 00 00 3D 00 0D 00 3D 01 00 00 00 00 00 00 00 ...=...=........
010 6E 00 0A 00 F0 00 80 00 FF FF 7E 7E 15 00 81 FF n.........~~....
020 FF FF 00 00 06 02 7E 00 00 F4 1B F9 33 01 00 00 ......~.....3...
030 76 00 6C 00 6C E0 03 00 00 00 00 00 00 00 98 01 v.l.l...........
040 00 02 01 00 00 00 FF 7E 7E 7E 7E 7E 00 00 A0 FF .......~~~~~....
050 FF 00 00 00 00 00 00 00 7E 7E 7E 7E 15 29 04 00 ........~~~~.)..
060 94 67 2F 82 00 00 00 00 FF FF FF FF 00 01 61 61 .g/...........aa
ZCTXCOUR
CONT 070 05 .
ZCTXENV

ZEVTRECU

CONT 000 00 00 00 3D 00 0D 00 3D 01 00 00 00 00 00 00 00 ...=...=........
010 00 00 00 00 F0 00 80 00 FF FF 7E 7E 15 00 01 00 ..........~~....
020 74 2E 03 01 04 02 7E 00 00 74 2E 01 25 01 00 00 t.....~..t..%...
030 76 00 6C 00 6C E0 03 00 00 00 00 00 00 00 98 01 v.l.l...........
040 00 02 01 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E ...~~~~~~~~~~~~~
050 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 29 04 7E ~~~~~~~~~~~~~).~
060 7E 7E 2F 82 00 00 00 00 FF FF FF FF 00 01 60 60 ~~/...........''
ZCTXCOUR
CONT 070 05 .
ZCTXENV

ZEVTRECU

CONT 000 00 00 00 3D 00 0D 00 3D 01 00 00 00 00 00 00 00 ...=...=........
010 00 00 00 00 F0 00 80 00 FF FF 7E 7E 15 00 85 00 ..........~~....
020 54 14 03 00 04 01 7E 00 00 54 14 11 43 01 00 00 T.....~..T..C...
030 76 00 6C 00 6C E0 03 00 00 00 00 00 00 00 98 01 v.l.l...........
040 00 02 01 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E ...~~~~~~~~~~~~~
050 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 29 04 7E ~~~~~~~~~~~~~).~
060 7E 7E 2F 82 00 00 00 00 FF FF FF FF 00 01 60 60 ~~/...........''
ZCTXCOUR
CONT 070 05 .
ZCTXENV

ZEVTRECU

CONT 000 00 00 00 3D 00 0D 00 3D 01 00 00 00 00 00 00 00 ...=...=........
010 6E 00 0A 00 F0 00 80 00 FF FF 7E 7E 15 00 81 FF n.........~~....
020 FF FF 00 00 06 02 7E 00 00 EC 4F E1 31 01 00 00 ......~...O.1...
030 76 00 6C 00 6C E0 03 00 00 00 00 00 00 00 98 01 v.l.l...........
040 00 02 01 00 00 00 FF 7E 7E 7E 7E 7E 00 00 58 69 .......~~~~~..Xi
050 6E 00 01 00 00 00 00 00 7E 7E 7E 7E 15 29 04 00 n.......~~~~.)..
060 0C 4A 2F 82 00 00 00 00 FF FF FF FF 00 01 61 61 .J/...........aa
ZCTXCOUR
CONT 070 05 .
ZCTXENV

ZEVTRECU

CONT 000 00 00 00 3D 00 0D 00 3D 01 00 00 00 00 00 00 00 ...=...=........
010 6E 00 01 00 F0 00 80 00 7E 7E 7E 7E 15 00 85 00 n.......~~~~....
020 8C 74 03 00 04 01 7E 00 00 8C 74 A9 0B 01 00 00 .t....~...t.....
030 77 00 76 00 76 E0 03 00 00 00 00 00 00 00 98 01 w.v.v...........
040 00 02 01 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E ...~~~~~~~~~~~~~
050 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E ~~~~~~~~~~~~~~~~
060 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E ~~~~~~~~~~~~~~~~
ZCTXCOUR
CONT 070 05 .
ZCTXENV


Fichier après traitement :


***** CODCOMP=198 ***** 23/03/2007 18:24:58

ZEVTRECU

CONT 000 00 00 00 3D 00 0D 00 3D 01 00 00 00 00 00 00 00 ...=...=........
010 6E 00 0A 00 F0 00 80 00 FF FF 7E 7E 15 00 81 FF n.........~~....
020 FF FF 00 00 06 02 7E 00 00 14 58 E9 30 01 00 00 ......~...X.0...
030 76 00 6C 00 6C E0 03 00 00 00 00 00 00 00 98 01 v.l.l...........
040 00 02 01 00 00 00 FF 7E 7E 7E 7E 7E 00 00 C8 5D .......~~~~~...]
050 6E 00 01 00 00 00 00 00 7E 7E 7E 7E 15 29 04 00 n.......~~~~.)..
060 F4 5F 2F 82 00 00 00 00 FF FF FF FF 00 05 57 00 ._/...........W.
ZCTXCOUR
CONT 070 05 .
ZCTXENV

***** CODCOMP=198 ***** 23/03/2007 18:24:58

ZEVTRECU

CONT 000 00 00 00 3D 00 0D 00 3D 01 00 00 00 00 00 00 00 ...=...=........
010 00 00 00 00 F0 00 80 00 FF FF 7E 7E 15 00 81 FF ..........~~....
020 FF FF 00 00 06 02 7E 00 00 CC 33 01 43 01 00 00 ......~...3.C...
030 76 00 6C 00 6C E0 03 00 00 00 00 00 00 00 98 01 v.l.l...........
040 00 02 01 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E ...~~~~~~~~~~~~~
050 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 29 04 7E ~~~~~~~~~~~~~).~
060 7E 7E 2F 82 00 00 00 00 FF FF FF FF 00 01 61 61 ~~/...........aa
ZCTXCOUR
CONT 070 05 .
ZCTXENV

***** CODCOMP=198 ***** 23/03/2007 18:24:59

ZEVTRECU

CONT 000 00 00 00 3D 00 0D 00 3D 01 00 00 00 00 00 00 00 ...=...=........
010 6E 00 0A 00 F0 00 80 00 FF FF 7E 7E 15 00 81 FF n.........~~....
020 FF FF 00 00 06 02 7E 00 00 F4 1B F9 33 01 00 00 ......~.....3...
030 76 00 6C 00 6C E0 03 00 00 00 00 00 00 00 98 01 v.l.l...........
040 00 02 01 00 00 00 FF 7E 7E 7E 7E 7E 00 00 A0 FF .......~~~~~....
050 FF 00 00 00 00 00 00 00 7E 7E 7E 7E 15 29 04 00 ........~~~~.)..
060 94 67 2F 82 00 00 00 00 FF FF FF FF 00 01 61 61 .g/...........aa
ZCTXCOUR
CONT 070 05 .
ZCTXENV

***** CODCOMP=198 ***** 23/03/2007 18:25:00

ZEVTRECU

CONT 000 00 00 00 3D 00 0D 00 3D 01 00 00 00 00 00 00 00 ...=...=........
010 00 00 00 00 F0 00 80 00 FF FF 7E 7E 15 00 01 00 ..........~~....
020 74 2E 03 01 04 02 7E 00 00 74 2E 01 25 01 00 00 t.....~..t..%...
030 76 00 6C 00 6C E0 03 00 00 00 00 00 00 00 98 01 v.l.l...........
040 00 02 01 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E ...~~~~~~~~~~~~~
050 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 29 04 7E ~~~~~~~~~~~~~).~
060 7E 7E 2F 82 00 00 00 00 FF FF FF FF 00 01 60 60 ~~/...........''
ZCTXCOUR
CONT 070 05 .
ZCTXENV

***** CODCOMP=198 ***** 23/03/2007 18:25:01

ZEVTRECU

CONT 000 00 00 00 3D 00 0D 00 3D 01 00 00 00 00 00 00 00 ...=...=........
010 00 00 00 00 F0 00 80 00 FF FF 7E 7E 15 00 85 00 ..........~~....
020 54 14 03 00 04 01 7E 00 00 54 14 11 43 01 00 00 T.....~..T..C...
030 76 00 6C 00 6C E0 03 00 00 00 00 00 00 00 98 01 v.l.l...........
040 00 02 01 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E ...~~~~~~~~~~~~~
050 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 29 04 7E ~~~~~~~~~~~~~).~
060 7E 7E 2F 82 00 00 00 00 FF FF FF FF 00 01 60 60 ~~/...........''
ZCTXCOUR
CONT 070 05 .
ZCTXENV

***** CODCOMP=198 ***** 23/03/2007 18:25:02

ZEVTRECU

CONT 000 00 00 00 3D 00 0D 00 3D 01 00 00 00 00 00 00 00 ...=...=........
010 6E 00 0A 00 F0 00 80 00 FF FF 7E 7E 15 00 81 FF n.........~~....
020 FF FF 00 00 06 02 7E 00 00 EC 4F E1 31 01 00 00 ......~...O.1...
030 76 00 6C 00 6C E0 03 00 00 00 00 00 00 00 98 01 v.l.l...........
040 00 02 01 00 00 00 FF 7E 7E 7E 7E 7E 00 00 58 69 .......~~~~~..Xi
050 6E 00 01 00 00 00 00 00 7E 7E 7E 7E 15 29 04 00 n.......~~~~.)..
060 0C 4A 2F 82 00 00 00 00 FF FF FF FF 00 01 61 61 .J/...........aa
ZCTXCOUR
CONT 070 05 .
ZCTXENV

***** CODCOMP=198 ***** 23/03/2007 18:25:29

ZEVTRECU

CONT 000 00 00 00 3D 00 0D 00 3D 01 00 00 00 00 00 00 00 ...=...=........
010 6E 00 01 00 F0 00 80 00 7E 7E 7E 7E 15 00 85 00 n.......~~~~....
020 8C 74 03 00 04 01 7E 00 00 8C 74 A9 0B 01 00 00 .t....~...t.....
030 77 00 76 00 76 E0 03 00 00 00 00 00 00 00 98 01 w.v.v...........
040 00 02 01 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E ...~~~~~~~~~~~~~
050 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E ~~~~~~~~~~~~~~~~
060 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E ~~~~~~~~~~~~~~~~
ZCTXCOUR
CONT 070 05 .
ZCTXENV


Sachant que j'ai les dates dans des variables ! J'arrive à insérer la partie ****** CODCOMP ********
mais pas l'heure puisqu'elle change tout le temps...
Pour insérer le CODCOMP :

sed '
/ZEVTRECU/ i\
********** CODCOMP='"$codcomp"' **********

' data

mais pour l'heure...?
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 895
26 août 2010 à 11:54
Il faut solutionner chaque problème un par un et non pas tout d'un coup :-\

Pour l'heure on verra plus tard.

Bon là sur ton exemple tu insères "********** CODCOMP='"$codcomp"' **********\n" avant chaque "ZEVTRECU". Mais tu parlais d'en sauter quelques uns non ? Combien ?
0
Non quand je parlais de sauter certaines occurrences c'était pour faciliter l'insertion de l'heure (qui est ciblée).

J'ai trouvé une solution pour l'heure mais il y a surement plus rapide :

sed '
/ZEVTRECU/ i\
********** CODCOMP='"$codcomp"' ********** BALISE

' data

Puis je substitue dans une boucle :

while (( i <= nbre_paragraphe ))
do
sed 's/BALISE/'"$heure'"/'"$i''' data
(( i=+1 ))
done
0
dubcek Messages postés 18722 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 9 mai 2024 5 615
26 août 2010 à 12:20
hello
il faut calculer l'heure du moment?
 $ CODE=198
$ DATE="23/03/2007"
$ 
$ awk -v c=$CODE -v d="$DATE" '/ZEVTRECU/ {"date +\" %T\"" | getline h ; printf("\n***** CODCOMP=%d ***** %s %s\n\n", c, d, h)} ; { print}' fichier

***** CODCOMP=198 ***** 23/03/2007  12:17:19

ZEVTRECU

CONT 000 00 00 00 3D 00 0D 00 3D 01 00 00 00 00 00 00 00 ...=...=........
010 6E 00 0A 00 F0 00 80 00 FF FF 7E 7E 15 00 81 FF n.........~~....
020 FF FF 00 00 06 02 7E 00 00 14 58 E9 30 01 00 00 ......~...X.0...
030 76 00 6C 00 6C E0 03 00 00 00 00 00 00 00 98 01 v.l.l...........
040 00 02 01 00 00 00 FF 7E 7E 7E 7E 7E 00 00 C8 5D .......~~~~~...]
...
...
0
Non je dispose de deux variables à chaque fois :

echo $hd
23/03/2007 18:25:32

echo $codcomp
198
0
dubcek Messages postés 18722 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 9 mai 2024 5 615
Modifié par dubcek le 26/08/2010 à 14:34
comme ça ?
$ hd="23/03/2007 18:25:32" 
$ codcomp=198 
$ awk -v c=$codcomp -v d="${hd}" '/ZEVTRECU/ {printf("***** CODCOMP=%d ***** %s\n\n", c, d)} ; {print}' fichier 

***** CODCOMP=198 ***** 23/03/2007 18:25:32 

ZEVTRECU 

CONT 000 00 00 00 3D 00 0D 00 3D 01 00 00 00 00 00 00 00 ...=...=........ 
010 6E 00 0A 00 F0 00 80 00 FF FF 7E 7E 15 00 81 FF n.........~~.... 
020 FF FF 00 00 06 02 7E 00 00 14 58 E9 30 01 00 00 ......~...X.0... 
030 76 00 6C 00 6C E0 03 00 00 00 00 00 00 00 98 01 v.l.l........... 
040 00 02 01 00 00 00 FF 7E 7E 7E 7E 7E 00 00 C8 5D .......~~~~~...] 
050 6E 00 01 00 00 00 00 00 7E 7E 7E 7E 15 29 04 00 n.......~~~~.).. 
060 F4 5F 2F 82 00 00 00 00 FF FF FF FF 00 05 57 00 ._/...........W. 
ZCTXCOUR 
CONT 070 05 . 
ZCTXENV 

***** CODCOMP=198 ***** 23/03/2007 18:25:32 

ZEVTRECU 
... 
... 
0