IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

sed : remplacer *.tmp par $$*.tmp


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 64
    Par défaut sed : remplacer *.tmp par $$*.tmp
    Bonjour,

    Je souhaiterais renommer dans mon script tous les fichiers "*.tmp" par "$$.*.tmp", car en l'état, si 2 personnes exécutent mon script en même temps, il y a un soucis d'accès concurrent et ça ne marche pas.

    sed 's/*.tmp/$$*.tmp/g' mon_script ne fonctionne pas.

    Auriez-vous une idée ?

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bonjour,

    d'abord, ne faudrait-il pas mettre un verrou sur ton fichier plutôt que le renommer?

    Ensuite, sed va transformer le contenu d'un fichier texte. Pas son titre.
    On peut utiliser rename de la même façon.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ rename 's/.*/$$.&/' *.tmp
    Après cela dépend de ta version de rename.

  3. #3
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 347
    Par défaut
    Bonjour,

    Essaie d'utiliser les balises code, sinon il faut protéger le '*' dans la partie recherche (après le '&' permet de reprendre la totalité de la capture):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/\*.tmp/$$.&/g' mon_script
    Mais en fait, je ne suis pas sur que cela soit ça que tu veux, peux tu donner un exemple concret ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 64
    Par défaut
    Bonjour à tous,

    Désolé pour la balise code.

    Pour exposer plus clairement mon problème : j'ai un script dans lequel je passe par plein de fichiers plats, ces fichiers plats sont nommés par exemple en test_1.tmp, test_2.tmp, etc.. mais quand 2 personnes lancent mon script en même temps, il y a confusion vis à vis de la création/lecture/suppression de ces fichiers, qui pose problème lors de l'execution du script.
    J'ai donc décidé de renommer chaque fichier cité dans mon script en $$-test_1.tmp, $$-test_2.tmp etc.. afin que chaque fichier créé prenne en préfixe le n° du process avec lequel il est lancé, de cette façon, tout le monde peut lancer le script, il y a n'y a plus d'histoire d'accès concurrent.

    Je voulais donc éditer mon script, non pas à la main, mais via sed, car je travaille avec un très grand nombre de fichiers plats (je dois en avoir 25/30, que j'efface à la fin) et c'était aussi histoire d'éviter les erreurs, car je balance la modification en prod juste derrière.

    Je voulais donc, dans mon script, remplacer : test_1.tmp par $$-test_1.tmp. Sachant que dans les fichier .tmp, il y en a qui portent une mention autre que "test", comme par exemple oracle_1.tmp. Je voulais donc utiliser "*" pour remplacer tous les noms de fichiers avec l'extension tmp.

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 347
    Par défaut
    Ok,
    A supposer qu'il n'y a pas d'espace dans les noms de tes fichiers, il est possible de faire quelque chose qui ressemble à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/[^ ]*.tmp/$$-&/g' fichier

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 64
    Par défaut
    ça marche, merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Solaris] [Sed] remplacement d'un # par \ -> fichier vide :?
    Par erox44 dans le forum Shell et commandes POSIX
    Réponses: 9
    Dernier message: 09/10/2013, 15h29
  2. Sed : Remplacement de chaines par d'autres avec des caractères spéciaux
    Par argoet dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 28/09/2011, 12h50
  3. [Sed]Remplacer une série d'espaces par un délimiteur
    Par progfou dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 24/01/2011, 15h09
  4. Usage de SED: remplacement d'une ligne par une autre
    Par Shub-Niggurath dans le forum Administration système
    Réponses: 1
    Dernier message: 18/09/2008, 20h07
  5. sed: remplacer une ligne qui commence par Version
    Par lili2704 dans le forum Linux
    Réponses: 8
    Dernier message: 21/07/2008, 14h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo