Remplacement chaine de caractère

Fermé
NBK59000 Messages postés 11 Date d'inscription mercredi 1 février 2012 Statut Membre Dernière intervention 1 février 2012 - 1 févr. 2012 à 09:56
NBK59000 Messages postés 11 Date d'inscription mercredi 1 février 2012 Statut Membre Dernière intervention 1 février 2012 - 1 févr. 2012 à 11:38
Bonjour,


Bonjour, je dois faire un script UNIX qui me pose souci.
Le script doit :
1) Aller dans le repertoire /travail/YYYYMMDD-1 par rapport à la date système
soit /travail/20120201 si on est le 02/02/2012
2) Scrupter tous les fichiers d'extension xml des sous-repertoires et remplacer dans le fichier la premiere occurrence de
<NumCde>000000000 par <NumCde>

Merci d'avance pour votre aide, ca me dépannerait bien ...
A voir également:

4 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
1 févr. 2012 à 10:01
Salut,

Quel système ?
Quel shell ?
Quelle version de "sed" ?
La 1ère occurrence de chaque la ligne ou sur l'ensemble du fichier ?
0
NBK59000 Messages postés 11 Date d'inscription mercredi 1 février 2012 Statut Membre Dernière intervention 1 février 2012
1 févr. 2012 à 10:03
La premiere occurence dans le fichier
C'est sur un AIX 5.3
Je ne connais pas la version de sed
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
1 févr. 2012 à 10:10
Ok.

Est-ce que 'date "+%Y%m%d"' renvoie bien le bon format sous ton AIX ?

Que renvoie "sed --version" ?
0
NBK59000 Messages postés 11 Date d'inscription mercredi 1 février 2012 Statut Membre Dernière intervention 1 février 2012
1 févr. 2012 à 10:16
date "+%Y%m%d
renvoie
20120201 -> OK

et sed -V et sed --version ne fonctionnent pas ...

sed: illegal option -- V
Usage: sed [-n] [-u] Script [File ...]
sed [-n] [-u] [-e Script] ... [-f Script_file] ... [File ...]
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
1 févr. 2012 à 10:28
Ok.

Peux-tu tester cette commande "sed" sur un de tes fichiers et me dire si le remplacement de la 1ère occurrence est effectif à l'écran ?

sed '0,/<NumCde>000000000/{s//<NumCde>/;}'
0
NBK59000 Messages postés 11 Date d'inscription mercredi 1 février 2012 Statut Membre Dernière intervention 1 février 2012
1 févr. 2012 à 10:32
Non, ca ne marche pas ...
Par contre, j'ai réussi en faisant :

sed -e 's/<NumCde>000000000/<NumCde>/g' < my_fic.xml > temp.xml
mais je suis obligé de passer par un fichier temporaire temp.xml
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
1 févr. 2012 à 10:34
Oui mais cette commande modifie toutes les occurrences et non pas seulement la première ;-\
0
NBK59000 Messages postés 11 Date d'inscription mercredi 1 février 2012 Statut Membre Dernière intervention 1 février 2012
1 févr. 2012 à 10:36
meme en supprimant le/g ?
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
1 févr. 2012 à 10:39
Ben oui le "g" c'est pour substituer toutes les occurrences d'une même ligne.

Essaie comme ça alors :

sed -e '1,/<NumCde>000000000/{s/<NumCde>000000000/<NumCde>/;}'
0
NBK59000 Messages postés 11 Date d'inscription mercredi 1 février 2012 Statut Membre Dernière intervention 1 février 2012
1 févr. 2012 à 11:01
ksh: syntax error: '<' unexpected

:/

Par contre, ca simplifierait les choses de prendre toutes les occurrences du fichier ?
Au pire, je prends le risque ...
Il faudrait un truc du genre ..;
for fic in 'find . -name "*xml"'
do
sed -e 's/<NumCde>000000000/<NumCde>/g' < $fic > temp.xml
mv temp.xml $fic
done

aux repertoires près ..
mais le $fic n'est pas interpreté dans le sed ....
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
1 févr. 2012 à 11:05
Attends, on va d'abord essayer autre chose ;-))

ed bidon.xml <<EOF
/<NumCde>/ s/<NumCde>000000000/<NumCde>/
.
w
EOF
0
NBK59000 Messages postés 11 Date d'inscription mercredi 1 février 2012 Statut Membre Dernière intervention 1 février 2012
1 févr. 2012 à 11:08
Oui, ca ca marche :))
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
1 févr. 2012 à 11:20
Le problème maintenant c'est pour intégrer cette syntaxe avec "find" et son option "-exec" ;-((
0
NBK59000 Messages postés 11 Date d'inscription mercredi 1 février 2012 Statut Membre Dernière intervention 1 février 2012
1 févr. 2012 à 11:22
moi je pensais à un truc du genre :
for fic in 'find . -name "*.xml'
do
ed $fic <<EOF
...
EOF
done

mais ca marche pô ...
0
NBK59000 Messages postés 11 Date d'inscription mercredi 1 février 2012 Statut Membre Dernière intervention 1 février 2012
1 févr. 2012 à 11:31
Pour l'instant y'a que :

sed -e 's/<NumCde>000000000/<NumCde>/1' < my_fic.xml > temp.xml

qui fonctionne, mais impossible d'utiliser une variable pour remplacer my_fic.xml ...
0