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 01/10/2007, 14h11   #1
DIE
Membre à l'essai
 
Inscription : août 2005
Messages : 82
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 82
Points : 24
Points : 24
Par défaut Modifier un fichier en "edite"

Bonjour,

je viens de découvir la commande PERL suivante qui permet de modifier le contenu d'un fichier.

perl -pi -e 's#<chaine de caractère à remplacer>#<chaine de caractère de remplacement>#g' <nom des fichiers>

y a-t-il l'équivalent en sed ou awk ? j'entends d'éviter de créer un fichier pour ensuite le renommer

Merci
DIE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2007, 14h15   #2
Membre éclairé
 
Inscription : décembre 2006
Messages : 271
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : décembre 2006
Messages : 271
Points : 324
Points : 324
Code :
sed -i -e 's#<chaine de caractère à remplacer>#<chaine de caractère de remplacement>#g'  FILE
tamiel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2007, 14h48   #3
DIE
Membre à l'essai
 
Inscription : août 2005
Messages : 82
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 82
Points : 24
Points : 24
je suis en KSH sous AIX je n'ai pas l'option -i
en awk ce n'est pas possible ?
DIE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2007, 23h50   #4
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 946
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 946
Points : 1 085
Points : 1 085
Le problème n'est pas le shell( ksh), mais le sed utilisé. Si ton sed ne possède pas l'option -i, il n'est pas dur d'écrire un script ou un alias pour le simuler, en passant par un fichier temporaire.

Et awk n'est pas prévu pour remplacer le travail de sed. À ma connaissance, il ne possède pas d'équivalent du -i, et la syntaxe est plus lourde pour faire un simple remplacement de regexp.
LLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2007, 11h28   #5
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 497
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 497
Points : 9 671
Points : 9 671
Bonjour,

sed ou awk permettent de faire des traitements, mais ne permettent pas, sauf option particulière, de travailler sur le fichier d'entrée.
La seule solution dans ce cas est de passer par un fichier temporaire :
Code :
1
2
 
sed 'commande_sed_a_executer' fichier_entree > fichier_sortie
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2007, 11h51   #6
DIE
Membre à l'essai
 
Inscription : août 2005
Messages : 82
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 82
Points : 24
Points : 24
Merci de vos réponses

donc il n'y a que PERL qui permet de modifier un fichier en entrée.
c'est dommage je trouve de devoir toujours créer des fichiers temporaires pour après les deleter...

Sur MVS par exemple, dans un JCL un fichier temporaire s'appelle &&quelquechose et il est supprimer automatiquement en fin d'execution
__________________
############
# KSH sous AIX #
############
DIE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2007, 12h03   #7
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 946
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 946
Points : 1 085
Points : 1 085
Pour information, Gnu sed (qui possède l'option -i) travaille sur un fichier temporaire et le copie ensuite (ou le déplace, selon que l'on souhaite un backup ou non). Je ne serais pas surpris si perl faisait la même chose.

Edit : après test, je viens de voir que perl a le même comportement : il n'y a pas besoin des droits en écriture pour utiliser -i. C'est donc trivial à simuler.

Donc, fais un script ou un alias qui fasse la même chose de façon transparente. C'est pas compliqué et ça rend des services quand on utilise un sed très basique.
LLB 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 21h20.


 
 
 
 
Partenaires

Hébergement Web