Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/12/2011, 11h41   #1
Invité régulier
 
Étudiant
Inscription : mai 2011
Messages : 12
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 12
Points : 6
Points : 6
Par défaut [Shell] plusieurs commandes sed simultanées dans un même script

Bonjour,

Je cherche à effectuer une modification dans plusieurs fichiers .xml
En effet, dans le cadre d'un script en php, je dois modifier tous les noms de balises où il existe un trait d'union, comme dans "<edp-article>", et seulement les traits d'union contenus dans les balises, pas ceux du texte.

J'ai écris le script suivant :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
#!/bin/bash
 
i=1;
 
for fichier in *.xml
do
  echo "Traitement de $fichier ...";
  sed -e 's/-id/_id/g' "$fichier" > $i.xml ;
  sed -e 's/-article/_article/g' "$fichier" > $i.xml;
  sed -e 's/-[a-z]/_title/g' "$fichier" > $i.xml;
  sed -e 's/-paper/_paper/g' "$fichier" > $i.xml;
  sed -e 's/-elec/_elec/g' "$fichier" > $i.xml;
  sed -e 's/-number/_number/g' "$fichier" > $i.xml;
  sed -e 's/-page/_page/g' "$fichier" > $i.xml;
  sed -e 's/-name/_name/g' "$fichier" > $i.xml;
let "i+=1";
done
Je n'arrive pas à faire en sorte que toutes les substitutions s'effectuent. Seule la dernière commande sed est prise en compte. J'ai essayé en intercalant un pipe et un '&' entre chaque commandes mais rien n'y fait.

Quelqu'un aurait-il une explication ?
hakkio est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 05/12/2011, 12h15   #2
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
Bonjour,

à partir d'un fichier source qui ne change pas, tu écrases à chaque fois le fichier destination !
essaye
Code :
 sed -e '…' -e '…' src > dst
ou
Code :
sed '… ; … ; …' src > dst
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/12/2011, 12h21   #3
Invité régulier
 
Étudiant
Inscription : mai 2011
Messages : 12
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 12
Points : 6
Points : 6
Ça marche !! ^^
J'ai utilisé la première méthode, avec le -e, parce que la deuxième ne fonctionnait pas.

Merci beaucoup
hakkio est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/12/2011, 14h25   #4
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Tu n'as pas un problème avec sed -e 's/-[a-z]/_title/g' ???

Normalement cette commande est sensée remplacer tout tiret suivi d'une lettre minuscule compris dans l'intervalle a-z par un underscore suivi de title, ce qui devrait aussi interféré avec les commandes qui suivent (les empêcher vu que le motif n'existerait plus) et remplacer partout dans ton fichier xml tout motif correspondant

Sinon tu peux aussi essayer cette syntaxe :

Code :
sed 's/-\(id\|article\|paper\|elec\|number\|page\|name\)/_\1/g'
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/12/2011, 14h40   #5
Invité régulier
 
Étudiant
Inscription : mai 2011
Messages : 12
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 12
Points : 6
Points : 6
Si. Il y avait bien un problème avec [a-z] mais je m'en suis rendue compte en exécutant le script

Merci en tout cas
hakkio est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h25.


 
 
 
 
Partenaires

Hébergement Web