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 :

extraction d'un mot d'une chaine


Sujet :

Shell et commandes GNU

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Par défaut extraction d'un mot d'une chaine
    Bonjour,
    je cherche depuis tout à l'heure dans le forum mais je ne trouve pas comment je pourrais faire pour pouvoir savoir si une ligne d'un fichier que je suis entrain d'ouvrir contient un mot donné pour que je puisse par la suite extraire une mot de la chaine.

    c'est comme si j'ai une ligne d'un fichier qui contient par exemple ça :

    "gedit" title="teste.sh" (~/Bureau) - gedit" role="gedit-window-123453423-0...

    ce que je veux c'est lorsque je lis cette ligne je veux tester d'abord s'il contient ou non le mot "title" ensuite extraire le titre du fichier teste.sh, effectuer par la suite une recherche avec la commande find qui me retournera le chemin complet du fichier, à partir de ce chemin je veux enlever le nom du fichier de nouveau et remplacer "(~/Bureau)" par le chemin retourné par find.

    pouvez vous me dire s'il vous plais comment je pourrai faire cela.
    merci beaucoup pour votre aide

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 677
    Par défaut
    bonjour,

    sed est ton ami !

    N'y a-t-il qu'une seule ligne, dans le fichier d'origine, pour laquelle cette manipulation est nécessaire, ou y en a-t-il plusieurs ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Par défaut
    en effet c'est pour plusieurs lignes du fichier

    en effet j'ai pensé à utiliser sed aussi mais j'arrive pas à terminer la commande :
    sed 's/.title=" \ fichier(je met le fichier ou la ligne ? )
    vu que je lis le fichier ligne par ligne

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 677
    Par défaut
    la ligne.
    si tu utilises bash : sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     echo "$ligne" | sed ...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Par défaut
    merci beaucoup N_BaH,

    est ce que vous avez une idée comment je pourrais vérifier si une chaine de caractère existe dans une autre ou non en shell.
    par exemple :

    dans la chaine : title="teste.sh" comment je pourrais vérifier s'il y a ' title=" '

    autre chose s'il vous plait , j'essaie de lister la liste de fichier modifier mais je bloque au niveau d'un teste entre deux chaine de caractere pouvez vous s'il vous plait me dire ou est l'erreur s'il vous plait.
    find -mmin -5 -type f print > fichier
    while read ligne
    do
    set $(echo $ligne)
    phrase=$(eval echo $ligne)

    var=$(eval echo ${phrase##*.})
    if test -n $var
    then
    if "$var"="odt"
    then
    ...
    fi
    fi
    le test if "$var"="odt" ne s'effectue pas pouvez vous m'indiquer mon erreur s'il vous plait

    merci beaucoup

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 677
    Par défaut
    bonjour manren,

    dans la chaine : title="teste.sh" comment je pourrais vérifier s'il y a ' title=" '
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var='title="teste.sh"'
     
    if [[ $var = title=\"* ]]; then echo "ok"; else echo "KO"; fi
    ok
    hmm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    find -mmin -5 -type f print > fichier
    while read ligne 
    do 
    set $(echo $ligne)
    phrase=$(eval echo $ligne)
    
    var=$(eval echo ${phrase##*.})
    if test -n $var
    then 
    if "$var"="odt" 
    then 
    ...
    fi 
    fi
    1- qu'essaies-tu de faire avec ce qui est en gras ? à mon avisdevrait bien aller.

    2- si tu fais while read ligne; ...; done <fichier
    autant faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while read ligne; do ...; done < <(find -mmin -5 -type f)
    3- ce qui est en rouge n'est pas correct, il faudrait un test. soit test, soit [, soit [[
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Futur Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var='title="teste.sh"'
     
    if [[ $var = title=\"* ]]; then echo "ok"; else echo "KO"; fi
    ok

    Bonjour,

    est ce dans ce bout de code la variable $var récupère ce qu'il y a après (title=") ?

    merci pour votre aide

    avec ce qui est gras j'essaie de lister les différents fichiers durant une période données ensuite je récupère l'extension des fichiers et si le fichiers fait partie par exemple de l'office j'enregistre son chemin complet pour pouvoir l'ouvrir par la suite lors du démarrage.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 677
    Par défaut
    ce que je voulais dire, c'est que ce que j'ai mis en gras dans la copie de ton code, c'est n'importe quoi.
    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
    #!/bin/bash
     
    fichierSrc=tonFichier
    fichierNew=tonFichier.tmp
     
    while read line
    do fichier=$(sed -n '/title/{s@.*title="\([^"]*\)".*@\1@p}' <<< "$line")
       [ -n "$fichier" ] && chemin=$(find -mmin -5 -type f -name "$fichier" -printf '%h\n' -quit)
       [ -n "$chemin" ] && sed -n 's@\([^(]*\).*[^)]*)\(.*\)@\1 ('"$chemin"') \2@p' <<< "$line" || echo "$line"
    ##si ça fonctionne comme tu veux, supprime  la présente ligne et la précédente, et décommente la suivante, ainsi que la ligne mv
    #   { [ -n "$chemin" ] && sed 's@\([^(]*\).*[^)]*)\(.*\)@\1 ('"$chemin"') \2@' <<< "$line" || echo "$line"; } >> $fichierNew
       unset chemin fichier
    done < $fichierSrc
     
    #mv $fichierNew $fichierSrc
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Réponses: 5
    Dernier message: 30/06/2015, 11h01
  2. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  3. Extraction des mots d'une chaine de caractere
    Par ahd261 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 09/04/2009, 19h16
  4. Extraction mots dans une chaine de caractère
    Par mercure07 dans le forum C
    Réponses: 6
    Dernier message: 30/07/2008, 13h54

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