zipe31 a écrit 71 commentaires

  • [^] # Re: Oukisson ?

    Posté par  . En réponse au message Extraire des lignes comprises entre 2 motif . Évalué à 1.

    Un truc qui marche avec sed :

    sed -n ':z;N;$!bz;s#.*src="\([^"]*\)".*#\1#p' fichier
    ;-)

  • [^] # Re: Oukisson ?

    Posté par  . En réponse au message Extraire des lignes comprises entre 2 motif . Évalué à 1.

    Déjà ton fichier il est au format Micro$oft ;-(

    Donc faut le convertir avant avec dos2unix.

    Ensuite, je ne sais pas pourquoi, sed ne veut pas prendre tout l’intervalle avec cette syntaxe :

    sed -n '/.*src="/,/".*/{//d;p}' fichier

    Donc, il reste grep, qui lui est plus docile :

    grep -Pzo 'src="\K[^"]*' fichier

    ;-)

  • # Oukisson ?

    Posté par  . En réponse au message Extraire des lignes comprises entre 2 motif . Évalué à 1.

    Salut,

    Dans ton fichier imbuvable, ils sont où les motifs (début et fin) et où il est le lien ?

  • [^] # Re: /tmp ou /var

    Posté par  . En réponse au message Le bon répertoire. Évalué à 2.

    Salut,

    En complément, je lui conseillerai de jeter un œil au Sticky Bit

    ;-)

  • [^] # Re: sed + awk

    Posté par  . En réponse au message alternative de la commande paste. Évalué à 1.

    Salut,

    Ou juste avec sed ;-)

    sed 'R f2' f1 | sed ':z;s/^.\{1,20\}$/& /;tz;N;s/\n/\t/'
  • [^] # Re: le code ne correspond pas l'exécution

    Posté par  . En réponse au message Simple question de logique ?. Évalué à 2.

    Salut,

    Je ne comprends pas l'intérêt de ton 1er case…esac et de réaffecter la variable "$choixJ", puisque celle-ci contient déjà la bonne valeur ;-\

    Tu as juste besoin de changer la valeur de la variable $a avec un test unique (P|F|C)…

  • # Commençant ou contenent ?

    Posté par  . En réponse au message Mettre en commentaire une liste de varaibles dans plusieurs scripts. Évalué à 1.

    Salut,

    il faut mettre en commentaire que les lignes commençant par ces variables

    Toutes les lignes commençant par ces variables ou toutes les lignes contenant ces variables ?

    Parce que ce n'est pas pareil ;-\

    Cette syntaxe commente toutes les lignes commençant par les 3 variables sus-citées :

    sed '/^\(DATA_FILES\|PROJ_TOP\|EXP_LOG\)/ s/^/# /' fich

    Celle-là, toutes les lignes contenant les 3 variables :

    sed '/DATA_FILES\|PROJ_TOP\|EXP_LOG/ s/^/# /' fich

  • [^] # Re: Encore plus simple…

    Posté par  . En réponse au message Renommage en masse selon métadonnées.. Évalué à 1.

    Pour éviter des mésaventures si par malheur certains noms de fichiers venaient à contenir des espaces.
    Mieux vaut privilégier le mécanisme interne du shell concernant le développement des noms.

  • # Encore plus simple…

    Posté par  . En réponse au message Renommage en masse selon métadonnées.. Évalué à 2.

    Salut,

    for f in src/*.[mM][pP]4; do

    ;-))

    PS. À noter que "ls" est à proscrire dans un script ;-(

  • # Explications accolades… et plus si affinité…

    Posté par  . En réponse au message Doc sur sed. Évalué à 1.

    Salut,

    Je ne connais pas l’emploie des accolade avec les éléments à l’interieur.
    A priori ça permet d’aller à la ligne contenant la valeur de la variable label

    Euh… non, pas exactement.

    Les accolades permettent d'assigner une ou plusieurs commandes à un motif donné.
    Dans ton exemple, les instructions contenues entre les accolades ne s'appliqueront qu'à la ligne ou qu'aux lignes contenant la valeur de la variable "${label}".

    D'autre part, l'instruction écrite tel quel n'a pas trop de sens, du moins au sens littéral, mais sans voir le fichier cible et sans connaître le but précis, difficile de l'expliquer.

    L'étiquette ":a" entre les accolades et suivie de l'instruction "n" (next) puis impression de ladite ligne et branchement à l'étiquette est quelque part absurde (sauf si c'est le but recherché), mais en gros cette syntaxe va cibler le motif recherché pour y appliquer les commandes comprises entre accolade, à savoir :

    1. :a = pose d'une étiquette de référence
    2. n = on vide le buffer (espace de travail) et on prend la ligne suivante
    3. p = on imprime la nouvelle ligne contenue dans le buffer
    4. ba = on se branche à l'étiquette et on recommence à appliquer les commandes n;p;ba;

    Et c'est là que ça foire (4), parce que à partir de là, le script va tout simplement imprimer chaque ligne restante jusqu'à la fin du fichier. Ce qui ne semble pas être le but final.

    Pour moi, il aurait fallu écrire :

    sed -n ':a;/motif/{n;p;ba};' file
    pour que ça ait un sens.

  • [^] # Re: ouch (bis)

    Posté par  . En réponse au message Extraire username password d'une page html. Évalué à 1.

    J'ai pas tout pigé à tes explications ;-(

    $ wget -q -O- https://freevpn.it/accounts/ | sed -ne 's#.*Username:</b>[[:print:]]\([^<]*\).*#\1#p'
    freevpnit
    Par contre c'est vraiment dommage que tu ne puisses pas installer lynx ou w3m ;-\
    ```
    $ lynx -dump https://freevpn.it/accounts/ | grep -Po '(Password|Username):( |\xA0)\K[^ ]*'
    pptp
    RVvm5SCUtmoR
    freevpnit
    RVvm5SCUtmoR

    $ w3m -dump -T text/html https://freevpn.it/accounts/ | grep -Po '(Password|Username):( |\xA0)\K[^ ]*'
    pptp
    RVvm5SCUtmoR
    freevpnit
    RVvm5SCUtmoR
    ```

  • [^] # Re: ouch (bis)

    Posté par  . En réponse au message Extraire username password d'une page html. Évalué à 1.

    sed -ne 's#.*Password:</b> \([^<]*\).*#\1#p' 
    
  • [^] # Re: ouch (bis)

    Posté par  . En réponse au message Extraire username password d'une page html. Évalué à 1.

    Salut,

    sed -ne '#Password:# s#.Password: (.)<\/.*#\1#p'

    Autant pour le délimiteur de commandes (substitution (s#…#…#)), on peut le changer tel quel. Autant pour le délimiteur de motif (/…/{commande sed}), il est impératif de protéger le 1er caractère faisant office de nouveau délimiteur.


    sed -ne '\#Password:# s#.Password: (.)<\/.*#\1#p'
    ;-)

  • # Développement des paramètres

    Posté par  . En réponse au message probleme avec la commande ls | file. Évalué à 5.

    Salut,

    Et pourquoi pas tout simplement :

    file *
    ;-))

  • # man bash : remplacement des paramètres

    Posté par  . En réponse au message Transformer une chaine de caractères en bash. Évalué à 7. Dernière modification le 28 juin 2018 à 08:22.

    Salut,

    $ var="252Cf"
    
    $ echo "${var//[[:digit:]]}-${var//[[:alpha:]]}"
    Cf-252

    ;-)

  • [^] # Re: Non je ne suis pas un gourou

    Posté par  . En réponse au message SED ^^. Évalué à 1.

    Oups, j'ai oublié de protéger le point ;-[

    sed 's/\./,/'

    ;-)

  • # Non je ne suis pas un gourou

    Posté par  . En réponse au message SED ^^. Évalué à 1.

    Salut,

    Sans être un grand gourou de sed, et si et seulement si toutes les lignes de ton fichier sont du même acabit que l'exemple donné plus haut, alors ta 1ère syntaxe était presque la bonne. Fallait juste omettre le "g" (global) pour que la syntaxe ne s'applique qu'à la 1ère occurrence ;-)

    sed -i 's/./,/' master.csv

    ;-)

  • # Avec grep

    Posté par  . En réponse au message dans les lignes d'un fichier txt, supprimer uniquement ce qui vient après le caractère #. Évalué à 2.

    Salut,

    Avec grep :

    $ grep -o '[^#]*#' plop
    sssssss#
    zzzzzzz#
    eerreee#

    ;-)

  • # Avec w3m et grep

    Posté par  . En réponse au message récupérer une info variable sur un site avec CURL. Évalué à 1.

    Salut,

    $ w3m -dump -T text/html https://www.leboncoin.fr/ | grep -Po 'Trouvez la bonne affaire parmi \K[^[p]*'
    25 275 437

  • # locate ?

    Posté par  . En réponse au message Comment copier le chemin d'un fichier ?. Évalué à 3.

    Salut,

    Il existe la commande locate (sudo updatedb pour mettre à jour la base) qui normalement fait ça très bien.

    $ pwd
    /home/jp/trash
    
    $ locate tuto.sh
    /home/jp/Documents/Scripts/tuto.sh
    
    $ locate -i speedof
    /home/jp/Images/SpeedOf.Me.png
    

    ;-)

  • [^] # Re: ctrl+r ou un alias

    Posté par  . En réponse au message commande favorite. Évalué à 2.

    Salut,

    3°) avoir un shell "intelligent" mais ca demande parfois de s'adapter à sa nouvelle syntaxe, qui va reconnaitre le debut de la commande et t'afficher ce qu'il trouve dans l'historique

    J'avais ça dans mon pense bête :

    Il est souvent fastidieux de retrouver une commande via l'historique des commandes (flèches haut et bas). Cette petite astuce permet de retrouver les commandes plus rapidement juste en tapant le début de la commande et ensuite à l'aide des flèches haut et bas de faire défiler seulement les commandes se référant aux premières lettres tapées.

    Créer le fichier ~/.inputrc dans son /home/$USER et y coller :

    "\e[A": history-search-backward
    "\e[B": history-search-forward

    et depuis que je l'ai découvert je ne peux plus m'en passer.

  • # Site pour PC portables compatibles

    Posté par  . En réponse au message Un PC portable pour installer Linux.... Évalué à 1.

    Salut,

    Si ça peut servir, j'avais vu passer dernièrement chez Le Hollandais Volant ce site pour trouver un portable compatible GNU/Linux :
    Un site pour trouver les ordinateurs qui sont parfaitement compatibles avec Linux

    ;-)

  • [^] # Re: À tester…

    Posté par  . En réponse au message Sed sur plusieurs lignes. Évalué à 1.

    effectivement pour mettre du gras c'est mort, à moins d'une astuce, que je ne connais pas.

    Alors on est deux ;-)

    Merci pour les explications sur l'exposant.

  • [^] # Re: À tester…

    Posté par  . En réponse au message Sed sur plusieurs lignes. Évalué à 1.

    Ben quoi ? Je ne voulais pas de balises code pour mes explications, je voulais juste du gras (pour chaque ligne de code) et les explications en dessous.

    C'est de ma faute si certaines syntaxes passent mal ?

    Ou j'ai raté encore un truc ?

  • [^] # Re: À tester…

    Posté par  . En réponse au message Sed sur plusieurs lignes. Évalué à 3. Dernière modification le 29 août 2014 à 17:39.

    De rien.

    Voilà les explications, mais comme dit dans mon premier post, sans exemples précis et concret, ce n'est peut-être pas l'idéal ;-\

    #n
    On imprime que sur demande (flag "p")

    /^%!post.*/ !p
    Si le motif ne correspond pas, on imprime la ligne

    /^%!post/ {
    Si le motif correspond, on applique les commandes entre accolades

    h
    On copie le contenu de la mémoire principale dans la mémoire secondaire en écrasant ce qui s'y trouverait éventuellement

    :z
    On pose une étiquette

    n
    On vide le contenu de la mémoire principale en le remplaçant par la ligne suivante

    /^[[:space:]]*$/ {
    On teste le contenu pour voir s'il c'est soit une ligne vide, soit une ligne vide contenant d'éventuels espaces

    H
    Si c'est le cas, on ajoute le contenu de la mémoire principale à la mémoire secondaire

    b z
    Puis on se branche à l'étiquette et on recommence

    }
    Fin des commandes pour ce motif

    x
    Donc, si le motif précédent n'est pas trouvé, on échange le contenu des mémoires

    s/$/\nAAA/p
    On ajoute notre "ligne à insérer" à la fin du contenu de la mémoire principale (qui contient le motif recherché est ses éventuelles lignes vides ou remplies d'espace), et on l'imprime (flag "p")

    g
    On écrase le contenu de la mémoire principale par celui de la mémoire secondaire (qui contient la première ligne non vide qui suit le motif initial)

    G
    On ajoute à nouveau le contenu de la mémoire secondaire à la suite de lui-même. Petite explication supplémentaire pour ça à l'instruction suivante…

    D
    On efface le contenu de la mémoire principale du début de la ligne jusqu'au premier saut de ligne rencontré (\n), ce qui a pour effet de relancer le script sed depuis le début avec le contenu actuel de la mémoire principale. Sans cette petite pirouette (G puis D) le script serait relancé mais en passant à la ligne suivante, sans traiter la ligne actuelle.

    }
    Fin des commandes