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

Linux Discussion :

Programme de remplacement de texte dans des fichiers


Sujet :

Linux

  1. #1
    Invité4
    Invité(e)
    Par défaut Programme de remplacement de texte dans des fichiers
    Bonjour,

    Voici mon problème
    J'ai un répertoire et plein de sous répertoire bourés de fichiers php.
    Ils contiennent tous une partie identique en HTML et j'aimerais un programme qui permettrait de remplacer un texte dans tous ces fichiers.

    Par exemple remplacer <table class="salut" width="40%"> par <table class="salut" width="45%"> dans tous ces fichiers.

    Merci

  2. #2
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    je pense que sed est ton ami

    cat monfichier|sed -e "s/width=\"45%\"/width=\"40%\"/" > nouveau fichier

    sinon il y a vi qui pemet aussi de le faire en ligne de commande. Il me smeble qu'il y a déjà eu des posts sur ce sujet

  3. #3
    Invité4
    Invité(e)
    Par défaut
    ok, désolé pour le repost.
    mais il me faudrait en faire le faire sur une multitude de fichiers, càd tous les fichiers contenu dans un dossier et ses sous-dossiers.
    Est-il possible de faire cela avec une interface graphique, les lignes de commande me perurbent un peu

  4. #4
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    avec un interface graphique je vois pas
    sinon pour faire sur la 'multitude' de fichier que tu as, si tu arrive à le faire sure 1, tu peux utiliser 'find' pour le faire sur tous les fichiers.

    ex :

    find /repertoire/toto/ -name "*.php"|xargs lacommandepourRemplacer {}

    et voilou

  5. #5
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    Si tu dois avoir un petit programme graphique spécialisé pour chaque bessoin, tu es pas sorti de l'auberge


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for idontlikecommandprompt in $( find ./ -name "*.php" ) 
     
     do   
    sed -e "s/width=\"45%\"/width=\"40%\"/" $idontlikecommandprompt  > $idontlikecommandprompt.bak 
    mv $idontlikecommandprompt.bak  $idontlikecommandprompt
     
     
    done

  6. #6
    Invité4
    Invité(e)
    Par défaut
    Bon, ok mais auriez-vous une commande dans la console qui permette de remplacer un texte pas un autre dans plusieurs fichiers contenu dans des sous-dossiers se trouvant dans un dossier.
    Désolé de mon ignorance, je suis nouveau dans Linux.

    Je dois remplacer un gros paté html par un autre gros paté, genr 6-7 lignes.

  7. #7
    Invité4
    Invité(e)
    Par défaut
    Je vais essayer le script de becket mais j'aurais besoin de 2-3 explications.
    Je ne veux pas créer de fichiers .bak
    Ou entrer le répertoire des fichies ?

    Merci

    PS : Mes codes à chercher et remplacer contiennet plein de caractères spéciaux genre / et ", cela pose-t-il problème ?

  8. #8
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    le fichier bak n'est pas cré pour faire une sauvegarde mais parce que sed ne sais pas modifier le fichier qu'il traite. Il sait seulement rediriger vers sa sortie standard (normelement l'écran). Le cractère '>' permet derediriger la sortie standard vers un fichier. Puis on écrase l'ancien fichier par le .bak créé par sed. Après si tu veux effacer le fichier .bak utilise rm.

    $( find ./ -name "*.php" ) : récupère la liste de tous le fichiers php à partir du répertoire ./ (ici le répertoire courant)

    effectue commande pour chaque valeur de liste. Les valeurs sont placée une/une dans var

    for var in liste
    do
    (commandes)
    done

    l'otion -e de sed dit d'exécuter la commande sed qui suit. ici cette commande est du type remplacement 's'. Sed utilise les expression rationnelle (ou régulière par abus de langage) .
    s/regex/nouveau/ :signifie qu'on remplace toute les occurence correspondant à regex par nouveau. La commande sed s'exécutera sur le fichier pointé par la variable $var.
    > ${var}.new signifie qu'on redirige la sortie vers un fichier du même nom avec l'extension .new

    sed -e "s/width=\"45%\"/width=\"40%\"/" $var > ${var}.new

    Puis on écrase l'ancien fichier par le nouveau
    mv ${var}.bak ${var}

    voilou

  9. #9
    Invité4
    Invité(e)
    Par défaut
    Ok, merci
    Je suis au clair, il me reste deux petites questions.
    Dans mes codes à emplacer, j'utilise le caractère / et j'ai vu qu'il est aussi utilisé par ta commande, cela est-il conflictuel ?
    En fait cela l'est car Konsole me fait des erreurs, comment parer cela ? Merci

    Autrement je mets donc rm $idontlikecommandprompt.bak
    avant le done ?

  10. #10
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    je te conseille de regarder :
    man sed

    Avec sed tu peut remplace / par n'importe quel caractère. Ainsi tu peux faire:

    sed -e "s*toto*titi*" fichier

    [EDIT]
    oui le rm avant le done vu que c'est lui qui ferme le for

  11. #11
    Invité4
    Invité(e)
    Par défaut
    ok, merci

  12. #12
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 519
    Points : 1 104
    Points
    1 104
    Par défaut
    J'ignore si ton problème est encore d'actualité mais j'ai écrit un programme qui devrait y remédier : celui-ci.

    Edit : Désolé, j'ai voulu modifier un truc et maintenant il ne marche plus, il indique tout le temps que le dossier sélectionné est vide. Et de plus, je ne m'en suis rendu compte qu'après l'avoir transféré sur mon FTP...

    ReEdit : J'ai réparé ma bêtise, le programme marche de nouveau !

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 51
    Points : 32
    Points
    32
    Par défaut buggé
    Bonjour,
    Je viens d'essayer ce petit programme.
    Heureusement que j'ai travaillé sur des copies.
    Il fout en l'air tous les fichiers du répertoire.

    Ils ne contiennent plus que la dernière ligne.

    C'est bien de vouloir aider ses contemporains. C'est mieux de tester.

    Pour Info, la chaîne à remplacer était /menu1.php par /menu.php.

    Avis aux amateurs.

  14. #14
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 519
    Points : 1 104
    Points
    1 104
    Par défaut
    Je m'étais rendu du bug il n'y a pas longtemps et je n'ai pas eu le temps de le corriger ou de vous avertir, désolé.

    Malheureusement, moi, je ne travaillais pas sur des copies

    Tous les fichiers dans mon Bureau n'avaient plus que leur première ligne (Bureau parce que j'avais fait une erreur de sélection de dossier)

    Edit : Le problème a été réparé, mais un autre l'a remplacé : lorsque le dernier caractère du fichier est une nouvelle ligne, ce caractère est en moins dans le fichier remplacé.

    Mais c'est quand même un problème beaucoup moins grave !

Discussions similaires

  1. Remplacement de texte dans un fichier RTF
    Par Fearless13 dans le forum Langage
    Réponses: 3
    Dernier message: 17/11/2011, 11h28
  2. Réponses: 3
    Dernier message: 17/04/2011, 11h42
  3. remplacer du texte dans des formules
    Par millien dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 30/06/2008, 12h45
  4. Remplacement de texte dans un fichier
    Par horec dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 29/05/2008, 10h25
  5. [langage] Remplacer du texte dans un fichier
    Par Michaël dans le forum Langage
    Réponses: 9
    Dernier message: 11/03/2005, 15h19

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