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 :

Commande de suppression de texte


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Commande de suppression de texte
    Bonjour,

    J'aimerai créer une commande qui va supprimer un bout de texte (script js) dans tous les fichiers qui contiennent ce bout de texte. D'après ce que je constate, c'est ne sont essentiellement que des fichiers js .

    J'ai fait ressortir le nombre de fichier contenu ce bout de code à supprimer, et il y en a 25 000 fichiers.

    Existe-il un script pour passer à la moulinette tous les fichiers du serveur qui contiennent le bout de script à supprimer ?

    Merci vraiment pour votre aide

    A+

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    oui tu peux utiliser sed dans une boucle sur la liste des fichier pour les traiter.

    truc de base "qui permet de comprendre" à adapter à ton besoin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in *js ; do mv ${i} ${i}.old && sed 's/eee/aaa/' ${i}.old > ${i} && rm ${i}.old ; done
    en clair

    pour tout fichier *.js faire ( renomer en .old et si ok modifier eee par aaa et si ok effacer le .old )

    méthode qui permet donc le retour arrière et surtout de ne pas écraser le fichier d'origine si l'étape de substitution du texte échoue pour une raison quelconque.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Vraiment merci pour ta réponse super rapide !

    Par contre le texte de recherche ici dans ton exemple 'eee' va contenir une longue chaîne de caractères de script js qui comporte malheureusement des caractères spéciaux de code dont le '\' ou '/'

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/http://www.domaine.tld" {$mavar} >//'
    ou eee = s/http://www.domaine.tld" {$mavar} >
    et aaa = rien du tout car c'est une suppression de texte mon souhait

    Qu'en penses-tu ?

    Faut-il passer par un fichier texte annexe qui contiendrait toute la chaine 'eee', et l'appeler dans le script à la manière d'une variable ?

    Vraiment merci pour ton aide

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je viens d'avancé sur ton idée, en modifiant les directives de sed pour supprimer la ligne commençant par ce que je souhaite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in /home/moi/*js ; do mv ${i} ${i}.old && sed -e "/^début de mon texte de la ligne à supprimer/d" ${i}.old > ${i} && rm ${i}.old ; done
    ça semble fonctionner mais j'ai encore des problèmes pour le boucler récursivement dans les sous-dossier

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 654
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 654
    Par défaut
    Bonjour,

    soit tu es sous bash >=4, et tu peux positionner l'option globstar avec shopt, et tu boulce sur ~/**/*js,
    ou alors tu utilises find -exec avec sh :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find ~/ -type f -name "*.js" -exec sh -c 'for i do mv ${i} ${i}.old && sed -e "/^début de mon texte de la ligne à supprimer/d" ${i}.old > ${i} && rm ${i}.old ; done' {} \+
    non, je n'ai rien oublié : in "$@" est facultatif.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Citation Envoyé par N_BaH Voir le message
    soit tu es sous bash >=4, et tu peux positionner l'option globstar avec shopt, et tu boulce sur ~/**/*js,
    À ce moment là on peut même s'éviter une boucle, sed avec l'options "-i" (ou "-i.bak" pour faire une sauvegarde, celle-là étant facultative), devrait faire l'affaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i '/^début de mon texte de la ligne à supprimer/d' ~/**/*.js

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Bonjour,

    soit tu es sous bash >=4, et tu peux positionner l'option globstar avec shopt, et tu boulce sur ~/**/*js,
    ou alors tu utilises find -exec avec sh :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find ~/ -type f -name "*.js" -exec sh -c 'for i do mv ${i} ${i}.old && sed -e "/^début de mon texte de la ligne à supprimer/d" ${i}.old > ${i} && rm ${i}.old ; done' {} \+
    non, je n'ai rien oublié : in "$@" est facultatif.
    Pour ma culture personnelle, ne peut-on pas faire un exec simple? Du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    find ~/ -type f -name "*.js" -exec \
    sed -i -e "/^début de mon texte de la ligne à supprimer/d" {} \;
    @zipe31: grillé

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

Discussions similaires

  1. Insérer des commandes Latex dans le texte
    Par Noodles dans le forum Mise en forme
    Réponses: 3
    Dernier message: 21/03/2007, 11h57
  2. Script pour créer une commande de suppression de fichiers
    Par romain.1105 dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 10/12/2006, 02h28
  3. Commande pour encadrer du texte
    Par Paenitentia dans le forum Mise en forme
    Réponses: 5
    Dernier message: 07/12/2006, 18h46
  4. Commande pour souligner du texte
    Par flower1987 dans le forum Mise en forme
    Réponses: 2
    Dernier message: 30/11/2006, 11h30
  5. [FLASH MX2004] Ajout et suppression de texte
    Par noarno dans le forum Flash
    Réponses: 2
    Dernier message: 17/06/2005, 13h41

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