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 14/09/2006, 12h12   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2005
Messages : 135
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 135
Points : 14
Points : 14
Envoyer un message via MSN à ujoodha
Par défaut Problème avec un sed

Bonjour,

Je voudrais un insérer un retour chariot apres chaque balise fermante dans fichier.

En fait dans mon fichier XML tous les tags sont sur une seul ligne c'est pour cela que je voudrais faire un script qui puisse insérer un retour a la ligne apres chaque caractere ><.

Exemple de fichier :
Code :
1
2
 
<?xml version='1.0' encoding='ISO-8859-1' ?><!DOCTYPE Batch ><!--PASREL--><Batch><Document></Document></Batch>
Voici la commande que j'ai fait moi même que j'ai testé sur cygwin et qui marchait

Code :
1
2
 
cat ./DEBUT/$fichier | sed s/"><"/'\>\n\<'/g > ./DEBUT/${fichier}_tmp
La je le teste sous une machine AIX avec ksh comme shell, et au lieu de d'inserer un retour chariot, il me genere un fichier vide.

J'ai essayé de mettre \ avant chaque balise mais rien a faire.

Comme je suis a cours d'idée, je sollicite votre aide.

Quelqu'un a-t-il une idée ?
ujoodha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 12h43   #2
Membre Expert
 
Avatar de 2Eurocents
 
Inscription : septembre 2004
Messages : 2 180
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : septembre 2004
Messages : 2 180
Points : 2 442
Points : 2 442
Comme ça ?
Code :
cat ./DEBUT/$fichier | sed s/\>\</\>\\n\</g
__________________
La FAQ Perl est par ici
: La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !
2Eurocents est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 14h01   #3
Candidat au titre de Membre du Club
 
Inscription : mars 2005
Messages : 135
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 135
Points : 14
Points : 14
Envoyer un message via MSN à ujoodha
ca ne marche pas non plus ca m'a effacé mon fichier
ujoodha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 14h47   #4
Membre Expert
 
Avatar de 2Eurocents
 
Inscription : septembre 2004
Messages : 2 180
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : septembre 2004
Messages : 2 180
Points : 2 442
Points : 2 442
  1. Il m'étonne que la commande que je t'ai passé efface ton fichier : elle ne fait que le lire et afficher son résultat à l'écran !
  2. Peux-tu être un peu plus explicite sur le "ça ne marche pas" ? On peut dire, tout aussi péremptoirement que "cela fonctionne" (au moins chez moi, ainsi que chez X ou Y ).

Il y a certainement des différences de fonctionnement dues au système : ma commande est testée avec le sed GNU, tout comme toi dans cygwin. Le sed AIX a peut-être un comportement différent (le sed IRIX en a un : il lui faut une substitution par \\\\n pour qu'il affiche un \n qui ne sera même pas interprété).
__________________
La FAQ Perl est par ici
: La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !
2Eurocents est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2006, 14h06   #5
Candidat au titre de Membre du Club
 
Inscription : octobre 2006
Messages : 14
Détails du profil
Informations personnelles :
Âge : 44

Informations forums :
Inscription : octobre 2006
Messages : 14
Points : 10
Points : 10
Ceci marche sur MacOSX 10.4.7 :
Code :
cat ./DEBUT/$fichier | sed 's/></>\#</g' | tr ">\#<" ">\n<"
J'utilise le # comme caractère à remplacer par tr mais on peut mettre ce qu'on veut à la place.
mikool19 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2006, 15h21   #6
Modérateur
 
Avatar de ggnore
 
Inscription : juillet 2004
Messages : 2 245
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juillet 2004
Messages : 2 245
Points : 1 902
Points : 1 902
Quand je veux insérer un retour à la ligne avec sed, je fais :

Code :
1
2
echo "azazaz" | sed 's/z/\
/g'
et ça me donne
Citation:
a
a
a
__________________
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
ggnore est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h01.


 
 
 
 
Partenaires

Hébergement Web