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 :

Récupérer le nom des fichiers traités en bash dans la commande sed du bash


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif

    Homme Profil pro
    Apprenti Langage C, pratiquant OpenOffice et Poo
    Inscrit en
    Février 2015
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Apprenti Langage C, pratiquant OpenOffice et Poo
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 229
    Par défaut Récupérer le nom des fichiers traités en bash dans la commande sed du bash
    Bonsoir et joyeux noël,

    Je nettoie un ensemble de fichiers html pour éliminer l'inutile. J'y suis allé trop fort, j'ai éliminé un lien vers une page qui porte le même nom que le fichier à traiter plus un complément. Je veux corriger ce lien avec une commande bash :

    Je souhaiterais utiliser dans la commande sed, pour remplacement, le nom du fichier en cours de traitement. Voici ce que j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for f in *.html; do sed -i -e 's/navimainnone">Use/"nomdufichierencoursdetraitement-xref.html">Use/' "$f"; done
    Je ne trouve pas comment représenter le fichier "f" dans la commande sed. J'ai essayé avec $f, "$f" mais cela est pris comme des caractères.

    Merci pour votre aide et bon réveillon.

    Pascaltech

  2. #2
    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,

    il faut les "extraire" des apostrophes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for f in *.html; do sed -i -e 's/navimainnone">Use/"'"$f"'-xref.html">Use/' "$f"; done
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre très actif

    Homme Profil pro
    Apprenti Langage C, pratiquant OpenOffice et Poo
    Inscrit en
    Février 2015
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Apprenti Langage C, pratiquant OpenOffice et Poo
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 229
    Par défaut
    Bonsoir,

    Wouaw ! Merci, j'ai compris le principe.

    J'ai commis une petite erreur, il y a des guillemets en trop après /, je ne les enlève pas dans la première expression,alors je n'ai pas à les mettre.

    J'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AccessibleButton.html-xref.html">Use
    Je peux corriger l'adresse facilement. Y-a-il une possibilité pour ne pas récupérer l'extention ?

    Comment appelle-t'on cette extraction des apostrophes, pour que je cherche des tutos sur le sujet ?

    Merci et Bon Noël.

  4. #4
    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
    je ne connais pas de tuto particulier à ce sujet.
    c'est une règle de syntaxe : les variables ne sont pas développées entre apostrophes (single quotes).
    ce qui implique que, lorsqu'on veut utiliser la valeur d'une variable dans une expression entre apostrophes, il faut la fermer (pour que la variable soit développée), et la rouvrir.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ' <début ... fermeture> ' "$variable" ' <réouverture ... fin> '
    pour enlever l'extension, tu peux utiliser le remplacement de paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ var="tra.la.lère"
    $ echo "$var"
    tra.la.lère
    $ echo "${var%.*}.la" #enlève tout ce qui est après le dernier point; et ajoute ".la", pour le fun.
    tra.la.la
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre très actif

    Homme Profil pro
    Apprenti Langage C, pratiquant OpenOffice et Poo
    Inscrit en
    Février 2015
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Apprenti Langage C, pratiquant OpenOffice et Poo
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 229
    Par défaut
    Bonjour et merci,

    Merci de m'avoir précisé que c'est une règle de syntaxe, donc du bash.
    Je n'ai pas précisé, je ne souhaitais pas écrire un programme bash, pas pour le moment, mais uniquement lancer une commande isolée. Je fais le remplacement avec une nouvelle commande sed :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for f in *.html; do sed -i -e 's/.html-xref/-xref/' "$f"; done
    car il n'y a pas d'autre occurrence dans le fichier.

    J'en conclu qu'il n'y a pas de solution pour éliminer l'extention à l'intérieur de la variable en une seule ligne de commande.

    "il faut la fermer (pour que la variable soit développée), et la rouvrir."

    Donc, je la ferme. Et l'ouvrirai à nouveau, mais cete fois-ci, sur un programme bash, promis.

  6. #6
    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
    mékeskidi ?

    il y a des règles de syntaxe en shell POSIX, en bash aussi, et en sed, et en awk, etc.
    dès qu'il y a langage, il y a syntaxe (bon, peut-être pas en import'kaouak, mais tellement peu de personnes le parle ! )
    Code POSIX : Sélectionner tout - Visualiser dans une fenêtre à part
    for f in *.html; do sed -i -e 's/navimainnone">Use/"'"${f %.*}"'-xref.html">Use/' "$f"; done
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  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 Pascaltech Voir le message
    Je n'ai pas précisé, je ne souhaitais pas écrire un programme bash, pas pour le moment, mais uniquement lancer une commande isolée.
    Il me semble utile de préciser ce qu'est "bash"!

    Bash est un langage de programmation et aussi un langage de commande...

    En tant que langage de programmation (ou langage de script), on écrit les instructions bash dans un fichier texte exécutable, appelé script, que l'interprète bash va ensuite exécuter euh... interpréter.

    En tant que langage de commande, on l'utilise pour taper, généralement à la main, des instructions bash dans une fenêtre shell ou terminal, c'est-à-dire en train d'exécuter un interprète shell, comme bash, lequel interprète les instructions au fur et à mesure qu'on les tape.

    Les instructions bash sont exactement les mêmes, qu'elles soient dans un script ou tapées à la main.

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

Discussions similaires

  1. [Toutes versions] Récupérer le nom des fichiers de type JPG dans un dossier
    Par solmyr16 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/08/2014, 15h00
  2. Réponses: 2
    Dernier message: 01/04/2009, 13h54
  3. [Débutant] récupérer le nom des fichiers textes vers legend
    Par mygwel dans le forum MATLAB
    Réponses: 2
    Dernier message: 18/03/2009, 22h51
  4. Réponses: 3
    Dernier message: 04/07/2008, 11h07
  5. ShellListView : comment récupérer les noms des fichiers?
    Par Lolo1988 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 11/12/2005, 23h19

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