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 :

Où trouver la page de man sur les motifs, pas les glob ?


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2020
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2020
    Messages : 88
    Par défaut Où trouver la page de man sur les motifs, pas les glob ?
    Bonjour,

    J'ai tenté de retrouver une discussion que j'avais posté dans les premières mais je ne l'ai pas retrouvée.
    Je vais donc vous réexpliquer, j'avais fait le script suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/bash
    for f in *.l;
    do
    	mv "$f" "${f}_$(date)"
    done
    Et j'étais bien embêté pour revenir en arrière.
    Vous m'aviez donné cette astuce, le caractère # qui supprime tous les caractères qui le suivent.
    Je ne me souviens plus du code exact.
    Vous m'aviez dit que ce n'est pas un caractère glob alors comment ça s'appelle et ou le trouver dans le man pour avoir une liste exhaustive et lire un peu ?
    Et pouvez vous me donner à nouveau le code qui me permet de supprimer tout ce qu'il y a après le caractère = '_', le caractère = '_' y compris pour que je fasse des tests.

    Merci pour votre aide.

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

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

    il s'agit de Remplacement de paramètres, il y en a de nombreux, pour de nombreux usages.

    soit v=foo_bar_baz, pour enlever ce qui suit le dernier _ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "${v%_*}"
    foo_bar
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    man -P 'less -p "Remplacement des paramètres"' bash

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    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 103
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    man -P 'less -p "Remplacement des paramètres"' bash
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ man -P 'less -p "Remplacement des paramètres"' bash
    Pattern not found  (press RETURN)
     
    $ man -P 'less -p "Parameter Expansion"' bash
    => 
       Parameter Expansion
           The `$' character introduces parameter expansion, command substitution, or arithmetic expansion.  The parameter name or symbol to be expanded may be enclosed in braces,
           which are optional but serve to protect the variable to be expanded from characters immediately following it which could be interpreted as part of the name.

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 376
    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 376
    Par défaut
    Et pour faciliter la recherche, donc n'afficher que les titre et sous-titre des paragraphes (example bash) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    $ man bash | grep '^\ \{,3\}[^ ]'
    BASH(1)                                                                                    General Commands Manual                                                                                    BASH(1)
    NAME
    SYNOPSIS
    COPYRIGHT
    DESCRIPTION
    OPTIONS
    ARGUMENTS
    INVOCATION
    DEFINITIONS
    RESERVED WORDS
    SHELL GRAMMAR
       Simple Commands
       Pipelines
       Lists
       Compound Commands
       Coprocesses
       Shell Function Definitions
    COMMENTS
    QUOTING
    PARAMETERS
       Positional Parameters
       Special Parameters
       Shell Variables
       Arrays
    EXPANSION
       Brace Expansion
       Tilde Expansion
       Parameter Expansion
       Command Substitution
       Arithmetic Expansion
       Process Substitution
       Word Splitting
       Pathname Expansion
       Quote Removal
    REDIRECTION
    ...
    ...

  6. #6
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2020
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2020
    Messages : 88
    Par défaut
    Bonjour,

    Encore une fois merci pour la précision de vos réponses mais j'ai quelques questions :
    jack-ft
    man -P 'less -p "Parameter Expansion"' bash
    Je ne comprends pas comment cette commande peut fonctionner.
    J'ai regardé dans le man pour connaître ce que fait l'option -P de la commande man.
    Y a marqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    -P pager, --pager=pager
                  Specify which output pager to use.  By default, man uses pager, falling back to  cat
                  if pager is not found or is not executable.  This option overrides the $MANPAGER en‐
                  vironment variable, which in turn overrides the $PAGER environment variable.  It  is
                  not used in conjunction with -f or -k.
     
                  The  value  may  be  a  simple command name or a command with arguments, and may use
                  shell quoting (backslashes, single quotes, or double quotes).  It may not use  pipes
                  to connect multiple commands; if you need that, use a wrapper script, which may take
                  the file to display either as an argument or on standard input.
    Donc si j'ai bien compris tu n'as pas besoins de pipe pour connecter la commande less car y a marqué :
    It may not use pipes to connect multiple commands

    C'est donc pour cela que tu n'utilises pas de pipe ? (juste pour confirmer)n
    Ensuite on utilise les quotes simples pour protéger la commande man, c'est à dire que :
    less -p doit être interpréter par la commande man et non par le shell ? (juste pour confirmer)
    bash à la fin car on cherche dans man bash ? (juste pour confirmer)

    Bonne technique pour faire une recherche dans le man en ligne de commande.
    A la seul condition de connaitre à l'avance ce qu'on cherche.
    Merci beaucoup.

    disedorgue
    man bash | grep '^\ \{,3\}[^ ]'
    Es ce que tu pourrais me détailler ce que fait cette expression régulière stp ?
    J'ai fait un man grep.
    Ensuite j'ai cherché le caractère = '^' en faisant /^ dans le man j'ai rien.
    Je crois que ça veut dire commence par.
    Comment je fais pour connaitre la signification de l'ensemble de ces caractères dans le man ?
    Le backslash étant un caractère d'échappement comme en langage C.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    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 103
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Et pour faciliter la recherche, donc n'afficher que les titre et sous-titre des paragraphes (example bash) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ man bash | grep '^\ \{,3\}[^ ]'
    BASH(1)                                                                                    General Commands Manual                                                                                    BASH(1)
    NAME
    ...
    Merci Disedorgue !

    Et, pour ceux qui arriveraient ici avec un grep pourri différent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ man bash | grep '^\ \{,3\}[^ ]'
    grep: invalid repetition count(s)
     
    $ man bash | grep '^\ \{0,3\}[^ ]'
    BASH(1)                                                                BASH(1)
    NAME
    ...

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 852
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par zephyre Voir le message
    J'ai tenté de retrouver une discussion que j'avais posté dans les premières mais je ne l'ai pas retrouvée.
    Tu vas dans ton profil et tu as un lien "trouver les discussions commencées" => https://www.developpez.net/forums/d2...pprimant-date/

    Et en complément du post de N_BaH, qui t'a montré le "%" qui part de la fin et s'arrête au premier caractère correspondant, le "%%" part aussi de la fin mais s'arrête au dernier caractère correspondant.

    soit v=foo_bar_baz, pour enlever ce qui suit le premier _ (donc celui le plus à gauche en partant de la fin):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "${v%%_*}"
    foo
    Et le "#" lui il part du début et cherche vers la fin, en s'arrêtant au premier élément tandis que "##" lui s'arrête au dernier élément
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo "${v#*_}"
    bar_baz
    $ echo "${v#*_}"
    baz
    En revanche je n'ai pas réussi à obtenir juste "bar" (ai tenté des mix de "##" et "%%" mais sans résultat)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 159
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 159
    Par défaut
    Hello !
    Citation Envoyé par Sve@r Voir le message
    Et le "#" part du début et cherche vers la fin, en s'arrêtant au premier élément tandis que "##" s'arrête au dernier élément

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "${v##*_}"
    baz


    Citation Envoyé par Sve@r Voir le message
    En revanche je n'ai pas réussi à obtenir juste "bar" (ai tenté des mix de "##" et "%%" mais sans résultat)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ u="${v%_*}" && w="${u#*_}" && echo "${w%%_*}"
    bar
    Bon dimanche,

  10. #10
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 852
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Jipété Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "${v##*_}"
    baz
    Ah oui, j'avais tapé le "##" chez-moi et ai oublié de le recopier dans le fofo

    Citation Envoyé par Jipété Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ u="${v%_*}" && w="${u#*_}" && echo "${w%%_*}"
    bar
    C'était naturellement sous-entendu "sans utiliser une variable intermédiaire". Evidemment qu'avec une variable qui récupère la sous-chaine j'y arrive
    D'ailleurs "w" contient déjà "bar", plus besoin d'y faire du remplacement
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 159
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 159
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    C'était naturellement sous-entendu "sans utiliser une variable intermédiaire".

    Je m'en suis bien douté, mais n'y suis pas arrivé non plus : me suis pris une avalanche de "mauvaise substitution" ou similiare et bon, bref, j'avais autre chose à faire. On compte sur les gourous de Bash pour nous montrer comment faire,

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    pour récupérer uniquement bar depuis foo_bar_baz, utilisez un tableau. KISS!
    ou une regex entre [[ ]], et BASH_REMATCH pour afficher le résultat.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/01/2014, 11h24
  2. Consultez les pages de man sur developpez.com
    Par Deepin dans le forum Linux
    Réponses: 11
    Dernier message: 29/11/2010, 11h44
  3. Page de Chapitre sur les versos
    Par Laura_Cuvi dans le forum Mise en forme
    Réponses: 1
    Dernier message: 19/05/2010, 22h01
  4. Réponses: 6
    Dernier message: 02/05/2007, 22h13
  5. Trouver un cours d'introduction sur les reseaux de neurones
    Par Alec6 dans le forum Méthodes prédictives
    Réponses: 2
    Dernier message: 10/10/2005, 16h41

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