SH - Recupérer txt situé entre parenthèse

Résolu
mp3yeur -  
 Utilisateur anonyme -
Bonjour à tous,

Après de longues recherches infructueuses, je recherche toujours une solution à mon problème :

Dans un script SH, je recherche à récuperer depuis un fichier CSS (en gros un fichier texte) la portion de texte, qui est différente à chaque fois :

#navCatTabs {background:url(../images/bg2.gif); color:#5E2F3B; font-weight:bold; margin-bottom:2px;}
.....etc........


Au moyen d'un grep j'ai récupéré uniquement les lignes qui contienent le mot "images"... Seulement, il n'y a pas une seule ligne qui est identique à l'autre, je souhaite conserver uniquement l'adresse ../images/bg.gif, sous forme de fichier texte :

../images/bg.gif
../images/toto.gif
../images/tata.jpg
etc.......

Une idée

4 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,
    [tmpfs]$ cat fich
    #navCatTabs {background:url(../images/blu.gif); color:#5E2F3B; font-weight:bold; margin-bottom:2px;}
    #navCatTabs {background:url(../images/bla.gif); color:#5E2F3B; font-weight:bold; margin-bottom:2px;}
    #navCatTabs {background:url(../images/bg1.gif); color:#5E2F3B; font-weight:bold; margin-bottom:2px;}
    #navCatTabs {background:url(../images/bg2.gif); color:#5E2F3B; font-weight:bold; margin-bottom:2px;}
    #navCatTabs {background:url(../images/bg3.gif); color:#5E2F3B; font-weight:bold; margin-bottom:2px;}
    
    [tmpfs]$ sed -n 's/.*(\(.*\)).*/\1/p' fich
    ../images/blu.gif
    ../images/bla.gif
    ../images/bg1.gif
    ../images/bg2.gif
    ../images/bg3.gif
    
    [tmpfs]$
    ;-))
    0
    1. mp3yeur
       
      Merci !

      Je teste, une chose est sûr, je n'aurai jamais trouvé seul ! Merci !
      0
  2. Utilisateur anonyme
     
    Hello !

    Je t'envoie le script complet, j'ai du louper un wagon, en fait j'obtiens en sortie ça :

    sed: can't read .footer_bg: No such file or directory
    .footer_bg
    sed: can't read {background:url(../images/line_1.gif): No such file or directory
    {background:url(../images/line_1.gif)
    sed: can't read top: No such file or directory
    top
    sed: can't read repeat-x;: No such file or directory
    repeat-x;
    sed: can't read padding:13px: No such file or directory
    padding:13px
    sed: can't read 0: No such file or directory


    Voici le script complet, :


    #!/bin/sh

    # Variables
    # Site a capturer
    page_html="http://osc3.template-help.com/zen_20196/index.php"
    racine_site="http://osc3.template-help.com/zen_20196"

    # Dossier de travail en local
    fichier_capture="/media/sdb1/scripts/fichier_capture.txt"
    dossier_capture="/media/sdb1/scripts/dossier_capture"
    page_principale="/media/sdb1/scripts/dossier_capture/index.php"
    liste_css="/media/sdb1/scripts/dossier_capture/liste_css.txt"
    liste_css_light="/media/sdb1/scripts/dossier_capture/liste_css_light.txt"

    # Execution
    # Recupere la page HTML a traiter en local
    wget $page_html -O$page_principale

    # Recupere la liste des fichiers css depuis le code HTML de la page index.php
    cat $page_principale|grep stylesheet>$liste_css

    # Simplifie le fichier css télechargé
    sed -i 's/media="print" //' $liste_css
    sed -i 's/<link rel="stylesheet" type="text\/css\" href="//' $liste_css
    sed -i 's/.css" \/>/.css/' $liste_css

    # Copie le fichier css
    cp $liste_css $liste_css_light

    # On allege encore le fichier css light en virant /includes/templates
    sed -i 's/includes\/templates\///' $liste_css_light

    # Recupere et separe la structure des dossiers /includes/templates/theme/css/Nom de fichier
    for ligne_css in `cat $liste_css`; do
    includes_path=$(echo $ligne_css | cut -d'/' -f1) # Dossier includes
    templates_path=$(echo $ligne_css | cut -d'/' -f2) # Dossier templates
    theme_path=$(echo $ligne_css | cut -d'/' -f3) # Dossier theme
    css_path=$(echo $ligne_css | cut -d'/' -f4) # Dossier css
    nom_de_fichier_css=$(echo $ligne_css | cut -d'/' -f5) # Nom de fichier

    # Creer les dossiers a recevoir en local
    mkdir $dossier_capture/$includes_path
    mkdir $dossier_capture/$includes_path/$templates_path
    mkdir $dossier_capture/$includes_path/$templates_path/$theme_path
    mkdir $dossier_capture/$includes_path/$templates_path/$theme_path/$css_path
    mkdir $dossier_capture/$includes_path/$templates_path/$theme_path/images

    # Recupere les fichiers css 1 par 1
    wget $racine_site/$ligne_css -O$dossier_capture/$ligne_css

    # Liste les repertoires images contenus dans le fichier css
    liste_des_images_url=$(cat $dossier_capture/$ligne_css|grep images)

    # Recupere les images depuis les fichiers css trouves
    for images_trouvees in $liste_des_images_url; do
    sed -n 's/.*(\(.*\)).*/\1/p' $images_trouvees
    echo $images_trouvees # c'est ici que logiquement on doit voir ../images/bg.gif ../images/toto.jpg etc...
    done

    done


    Si quelqu'un a une idée. Je suis en galère sur le SED final. Il me reste pas grand chose pour le terminer... Merci à tous.

    sed... La vérité est ailleurs ;-)
    0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
            # Recupere les images depuis les fichiers css trouves
              for images_trouvees in $liste_des_images_url; do
                sed -n 's/.*(\(.*\)).*/\1/p' <<<$images_trouvees >> les_images
                cat les_images
              done
          
        done
    Par contre, merci à l'avenir d'enlever le nom de ta boîte dans ta signature. Voir Neutralité commerciale et culturelle dans la charte de CCM
    0
  4. Utilisateur anonyme
     
    Merci ça fonctionne à merveille !
    0