Rechercher et remplacer par plus court
Cobalt2225
Messages postés
19
Date d'inscription
Statut
Membre
Dernière intervention
-
Cobalt2225 Messages postés 19 Date d'inscription Statut Membre Dernière intervention -
Cobalt2225 Messages postés 19 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis assez nouveau sur unix.
Je suis en train de construire un script qui doit me permettre de traiter un fichier et de remplacer une certaine occurence de chaine par une autre, mais en plus court.
Je m'explique par l'exemple :
J'ai ce fichier en entrée : test1.xml, qui contient ceci :
Ce que je souhaite, c'est remplacer uniquement les chaines de type: <from>51724600000 (<from>ET_11_CHIFFRES) par <from>517246 (<from>ET_6_CHIFFRES)
Ainsi, la sortie suite a ma commande unix serait :
J'avais pensé a une commande de ce type :
mais cette commande ne fait rien en fait, car je n'arrive pas a enlever les 5 derniers chiffres ... et je vous l'assure, je galere severe ;-)
Pourtant, une petite voix me dit que ca doit pas etre si compliqué !
Merci d'avance aux ames charitables !
Je suis assez nouveau sur unix.
Je suis en train de construire un script qui doit me permettre de traiter un fichier et de remplacer une certaine occurence de chaine par une autre, mais en plus court.
Je m'explique par l'exemple :
J'ai ce fichier en entrée : test1.xml, qui contient ceci :
<bin_range>
<from>516146</from>
<to>516146</to>
<effective_from_date>2018-08-06</effective_from_date>
<status>ACTIVE</status>
</bin_range>
<bin_range>
<from>51724600000</from>
<to>51724699999</to>
<effective_from_date>2018-03-13</effective_from_date>
<effective_to_date>2018-08-15</effective_to_date>
<status>INACTIVE</status>
</bin_range>
<bin_range>
<from>51724700000</from>
<to>51724799999</to>
<effective_from_date>2018-03-13</effective_from_date>
<effective_to_date>2018-08-15</effective_to_date>
<status>INACTIVE</status>
</bin_range>
Ce que je souhaite, c'est remplacer uniquement les chaines de type: <from>51724600000 (<from>ET_11_CHIFFRES) par <from>517246 (<from>ET_6_CHIFFRES)
Ainsi, la sortie suite a ma commande unix serait :
<bin_range>
<from>516146</from>
<to>516146</to>
<effective_from_date>2018-08-06</effective_from_date>
<status>ACTIVE</status>
</bin_range>
<bin_range>
<from>517246</from>
<to>51724699999</to>
<effective_from_date>2018-03-13</effective_from_date>
<effective_to_date>2018-08-15</effective_to_date>
<status>INACTIVE</status>
</bin_range>
<bin_range>
<from>517247</from>
<to>51724799999</to>
<effective_from_date>2018-03-13</effective_from_date>
<effective_to_date>2018-08-15</effective_to_date>
<status>INACTIVE</status>
</bin_range>
J'avais pensé a une commande de ce type :
sed -i "s/<from>\([0-9]\{11\}\)/<from>\1/g" test1.xml
mais cette commande ne fait rien en fait, car je n'arrive pas a enlever les 5 derniers chiffres ... et je vous l'assure, je galere severe ;-)
Pourtant, une petite voix me dit que ca doit pas etre si compliqué !
Merci d'avance aux ames charitables !
A voir également:
- Rechercher et remplacer par plus court
- Rechercher et remplacer word - Guide
- Remplacer disque dur par ssd - Guide
- Rechercher ou entrer l'adresse - Guide
- Rechercher par image - Guide
- Remplacer coco - Accueil - Réseaux sociaux
2 réponses
Salut,
T'étais pas loin ;-))
T'étais pas loin ;-))
$ sed '/<from>/{s/\([[:digit:]]\{6\}\)[^<]*/\1/}' f1
<bin_range>
<from>516146</from>
<to>516146</to>
<effective_from_date>2018-08-06</effective_from_date>
<status>ACTIVE</status>
</bin_range>
<bin_range>
<from>517246</from>
<to>51724699999</to>
<effective_from_date>2018-03-13</effective_from_date>
<effective_to_date>2018-08-15</effective_to_date>
<status>INACTIVE</status>
</bin_range>
<bin_range>
<from>517247</from>
<to>51724799999</to>
<effective_from_date>2018-03-13</effective_from_date>
<effective_to_date>2018-08-15</effective_to_date>
<status>INACTIVE</status>
</bin_range>
MERCI !!!
lol, j'etais just a 2 annees lumiere de la soluce la ;-)