Jacques L'helgoualc'h a écrit 85 commentaires

  • [^] # Re: 2 ou 3 choses

    Posté par  (site web personnel) . En réponse au message Fichier de trace. Évalué à 1.

    Pour Sed la page de manuel est un peu sommaire, c'est plutôt info sed qu'il faut consulter ; et plus si affinités sur
    http://sed.sf.net/
  • [^] # Re: 2 ou 3 choses

    Posté par  (site web personnel) . En réponse au message Fichier de trace. Évalué à 1.

    Le « + » a (à peu près) le même effet qu'un pipe vers xargs ; pour voir la différence avec le «\;», compare
    find ~/ -exec echo Echo {} \; | grep -c ^Echo
    find ~/ -exec echo Echo {} + | grep -c ^Echo
    find ~/ | xargs echo Echo | grep -c ^Echo

    Les deux dernières regrouperont les arguments trouvés par find.

    On peut même mettre plusieurs blocs -exec ... + à la suite, mais si tu veux une séquence logique, il vaut mieux écrire un script capable de traiter plusieurs arguments à la fois :
    ... -exec ton_script.sh {} +

    Sinon, il faut répéter l'argument
    ... -exec sh -c "echo A "{}"; echo B "{} \;

    (le + n'est utilisable qu'avec un seul {} à la fin).

    Si, la redirection peut être écrite n'importe où (en dehors d'une chaîne de caractères). Si tu veux la limiter à la commande en -exec, il faut utiliser le sh -c "sous-script shell avec ses redirections".
  • [^] # Re: 2 choses

    Posté par  (site web personnel) . En réponse au message Fichier de trace. Évalué à 1.

    Avant ou après l'ensemble du bloc -exec sed ... .
  • [^] # Re: 2 choses

    Posté par  (site web personnel) . En réponse au message Fichier de trace. Évalué à 2.

    On peut regrouper les substitutions dans le même script Sed (GNU Sed) --- ou utiliser plusieurs options -e commande :
    find ... -exec sed -i -e 's/a_intouch/w_intouch/g ; s/b_intouch/x_intouch/g' {} + ...

    Le + au lieu de \; permet de ne pas lancer un sed par fichier.
  • [^] # Re: Aargh, fermer l'accolade... :/

    Posté par  (site web personnel) . En réponse au message pb execution d'un script lire ligne a ligne plus whois des resultats. Évalué à 2.


    sed -ne '/UFW /{
      /SRC=192\.168/d
      s/.*SRC=\([^ ]*\) .*/\1/p
    }' /var/log/syslog |\
    ...
  • [^] # Re: lecture syslog + whois

    Posté par  (site web personnel) . En réponse au message pb execution d'un script lire ligne a ligne plus whois des resultats. Évalué à 3.

    Le code de NBaH peut encore être allégé en intégrant le if au script Sed ;
    par ailleurs, il vaut mieux remplacer le sous-shell par un pipe :sed -ne '/UFW /{
      /SRC=192\.168/d
      s/.*SRC=\([^ ]*\) .*/\1/p' /var/log/syslog |\
    while read ip ; do
      echo "$ip"
      whois "$ip" | grep -m1 -i 'country:'
    done

    (en simplifiant ton grep | head -1).

    De même, ton cat | grep | awk | grep -v peut être raccourci :
    </var/log/syslog awk '/UFW BLOCK INPUT/ && !/SRC=192\.168/{print $14}'
    (sans -F, vérifie le $14).

    On peut aussi intégrer sort | uniq -c au script Awk...
  • [^] # Re: Réponse sed

    Posté par  (site web personnel) . En réponse au message Question sed. Évalué à 1.

    Il y a trop de réponses parce que, sans accolades, seul le premier
    N dépend de la condition /prints(m_IPaddr)/ :
    sinon, le second N ajoute toujours la ligne suivante dans le tampon,
    et si sed y trouve une IP précédée d'une tabulation ...
  • [^] # Re: Réponse sed

    Posté par  (site web personnel) . En réponse au message Question sed. Évalué à 2.

    Oui, mais non : il faut tout mettre entre accolades...

    sed -nre '/prints\(m_IPaddr\)/{
      n;n # saute les deux lignes inutiles
      s/[ \t]+//g # supprime les espaces et tabulations
      /^[0-9]{1,3}(\.[0-9]{1,3}){3}$/p # écrit quand le reste ressemble à une IP
    }'
  • [^] # Re: Pas besoin de java

    Posté par  (site web personnel) . En réponse au message Recherche_remplace multiple. Évalué à 2.

    Damned, autant pour moi... (mais le parser pourrait distinguer un tiret initial, cf grep).
  • [^] # Re: Pas besoin de java

    Posté par  (site web personnel) . En réponse au message Recherche_remplace multiple. Évalué à 0.

    Plutôt

    sed -i -e '...' fichiers

    sinon la commande va servir d'argument à l'option -i ;
    variante : sed -i.old -e ...-e est facultatif.
  • [^] # Re: find

    Posté par  (site web personnel) . En réponse au message Supprimer une grande quantité de fichiers impossible. Évalué à 3.

    On peut éviter le pipe vers xargs, et les problèmes de noms de
    fichiers vicieux (qui ne doivent pas se poser ici) --- voir les options
    -print0 de find et -0 de xargs.

    find /var/qmail/mails/root -type f -exec rm -f {} +

    Sans l'option -type f, il faut peut-être reconstituer les trois
    sous-répertoires cur, new et tmp et vérifier leurs permissions.

    La remarque sur l'ancienneté est judicieuse, il serait bon de lire
    quelques messages récents avant de tout nettoyer ;).
  • # On peut omettre grep (et head)

    Posté par  (site web personnel) . En réponse au message killer n processus. Évalué à 2.

    Bonjour,

    ps -ef | awk '
      /[8]010/{print $2}
      NR>10{exit}
    ' | xargs kill -9

    va tuer les dix premiers d'une seule rafale...
    (le truc du [8] évite le suicide d'Awk).
  • [^] # Re: md5sum

    Posté par  (site web personnel) . En réponse au message Je cherche logiciel pour comparer les photos. Évalué à 1.

    Modifier les exifs ne change pas l'image proprement dite, mais
    seulement ses méta-données : si on fait la chasse aux doublons,
    il vaut mieux éviter de perdre des informations, mais on peut aussi
    vouloir les regrouper dans un même fichier.

    Tant qu'on se contente d'ajouter des infos, on peut
    considérer que l'original est intact.

    Garder dans le nom de fichier les quatre chiffres issus de l'APN
    peut aussi être utile...
  • [^] # Re: md5sum

    Posté par  (site web personnel) . En réponse au message Je cherche logiciel pour comparer les photos. Évalué à 1.

    Bonjour,

    Malheureusement, la moindre modification d'un champ Exif va fausser le test MD5,
    qui ne permet de détecter que les doublons stricts.

    On peut extraire l'image JPEG seule, par exemple avec jhead, option -purejpg,
    voire utiliser l'imagette incorporée, qui pourrait tolérer de légères modifications, et allégera un peu le travail de md5sums.
    M'enfin, quand il ne faut pas régénerer l'imagette...
  • # html-helper-mode

    Posté par  (site web personnel) . En réponse au message Emacs et html. Évalué à 3.

    fournit de très nombreux raccourcis clavier pour insérer des squelettes à compléter --- C-h m pour les voir.

    On peut aussi commencer à écrire la balise ouvrante, puis ESC TAB pour la compléter, ajouter la fermante et ramener le curseur entre les deux...
  • [^] # Re: for letter in a b c d e f

    Posté par  (site web personnel) . En réponse au message Equivalent boucle for ?. Évalué à 4.

    Bonjour,
    les fainéants préfèreront taper for letter in {a..z} ; do ....

    Les > "$LIST" ne sont pas très utiles, seul celui des z survivra...

    Le cat "$LIST" | afio ... est un « UUOC », on peut le remplacer par un < "$LIST" afio ... : j'utiliserais plutôt un seul pipe, avec si besoin l'étape supplémentaire find ... | tee -a "$LIST" | afio ... pour garder une copie de la liste (ou des "${LIST}_$letter").

    Par ailleurs certaines lettres pourraient être absentes, on peut le tester :
    [ "$(printf '%s' /home/${letter}*)" != "/home/${letter}*" ] && find ....
  • [^] # Re: Boucle for

    Posté par  (site web personnel) . En réponse au message Conversion multiple avec imagemagick. Évalué à 3.

    Quand on précise -resize 640x640 , la conversion se fera dans le carré indiqué, mais en respectant les proportions (et donnera donc 640x480 ou 480x640 selon l'orientation --- il y a des variantes plus compliquées).

    L'appel à Sed est inutile, le shell (Bash, Zsh, ...) sait modifier ses variables, qu'il vaut mieux protéger en cas d'espaces :
    convert "$i" -resize -40x640 "Image${i#Photo}"

    On peut aussi n'appeler qu'une seule instance de mogrify pour éviter la boucle, en rusant sur l'extension :
    mogrify -format jpeg -resize 640x640 '*.jpg'
  • [^] # Re: Sed&Awksontézamis

    Posté par  (site web personnel) . En réponse au message chiffre en lettre. Évalué à 2.


    J'aime beaucoup avec awk. Un jour peut-être, je lirais la doc :-)

    Elle est tout de même plus longue que celle de Sed :)


    Ma question à deux balles: tu utilises awk "en vrai" ou c'est juste pour le plaisir de l'exemple ?

    Oui, je l'utilise --- Awk est parfois très concis, par exemple iptables -nvL | awk '$1'
    ou un uniq sans tri : awk '!n[$0]++'. Il permet aussi d'éviter de piper plusieurs grep.
  • [^] # Re: Sed&Awksontézamis

    Posté par  (site web personnel) . En réponse au message chiffre en lettre. Évalué à 1.

    Kerro :

    # echo '0 2 54 fg1t 564.9' | sed -n '/0/ {s/0/zero/}; /1/ {s/1/un/}; /2/ {s/2/deux/}; /3/ {s/3/trois/}; /4/ {s/4/quatre/}; /5/ {s/5/cinq/}; /6/ {s/6/six/}; /7/ {s/7/sept/}; /8/ {s/8/huit/}; /9/ {s/9/neuf/}; p'
    zero deux cinqquatre fgunt 5six4.neuf



    S'amuser en root, c'est Mal(C)...

    $ echo '0 2 54 fg1t 564.9' | sed -e '
    /0/ s//zero/g
    /1/ s//un/g
    /2/ s//deux/g
    /3/ s//trois/g
    /4/ s//quatre/g
    /5/ s//cinq/g
    /6/ s//six/g
    /7/ s//sept/g
    /8/ s//huit/g
    /9/ s//neuf/g
    '
    zero deux cinqquatre fgunt cinqsixquatre.neuf


    et avec Awk :

    awk '
    BEGIN{
      split("un deux trois quatre cinq six sept huit neuf",L);
      L[0]="zéro";
    }
    /[0-9]/{
      for(n=0;n<10;n++){gsub(n,L[n])}
      print;
    }'



    Ca me fait penser à une question entendue dans je ne sais quel jeu télévisé: quel est le chiffre inscrit sur le maillot de tel
    joueur de foot ? Le candidat répond à toute vitesse 1 2 3 4 5 6 7 8 9. Nan nan la réponse était 11 :-)

    Ben, dans l'équipe B, ils ont des numéros hexadécimaux ?

    OK, -->[]
  • [^] # Re: à l'ancienne

    Posté par  (site web personnel) . En réponse au message inserer des lignes en debut de fichier. Évalué à 1.

    Je crains que la seconde solution ne marche pas, quand on insère plusieurs lignes avec la commande i, toutes les lignes sauf la dernière doivent être terminées par un \ ; il faudrait aussi entourer la construction $(...) par des doubles quotes pour empêcher le shell de la découper aux espaces...

    Par ailleurs, la commande 1i... va se retrouver comme argument de l'option -i, il faut insérer -e entre l'option -i sans argument et la commande Sed.


    La première solution est évidemment plus simple (et plus lisible :), mais on peut, avec l'aide de Bash, emboîter deux (GNU) Seds :


    ~ $ sed -i.old -e '1{h;r '<(sed -e '/^t/,$!d' fic2)'
    d};2{x;G}' fic1

    ~ $ cat fic2
    === fic2 ===

    alpha
    bravo
    tagada
    delta

    ~ $ diff fic1.old fic1
    0a1,3
    > tagada
    > delta
    >



  • # Find et Awk

    Posté par  (site web personnel) . En réponse au message Comptage nombre de fichier en arborescence. Évalué à 2.

    find repert/ -maxdepth 3 -mindepth 3 -type f | \
    awk '
    {
      sub("/[^/]+$","");
      n[$0]++;
    }
    END{
      if(NR){
       for(k in n){
        s=s","n[k];
       }
      }
      sub("^,","",s);
      print s;
    }
    '
  • [^] # Re: SED hatif

    Posté par  (site web personnel) . En réponse au message modification de ficier ligne commancant par lov et supprimer carartère. Évalué à 2.

    sed -ie s/\"//3g input

    mais ça ne répond pas exactement au problème, et crée une sauvegarde inpute. Plutôt :

    sed -i -e /^LOV/s/\"//3g input

    (ou -i.old pour l'extension de sauvegarde).
  • [^] # Re: Recettes

    Posté par  (site web personnel) . En réponse au message Problème d'installation lenny en netInstall. Évalué à 2.

    <radin>Tu peux aussi essayer avec une clef USB...</radin>

    Lenny n'étant pas encore stable, tu peux aussi attendre un peu pour voir si l'installeur change, en essayer un autre, etc.
    Tu peux aussi essayer un Etch ou Sid minimal sur une petite partition (un ou deux G), puis utiliser debootstrap pour ajouter Lenny sur une ou plusieurs autres.
  • [^] # Re: regexp

    Posté par  (site web personnel) . En réponse au message validation d'email. Évalué à 1.

    Vers la fin du livre de Jeffrey Friedl sur les expressions régulières, on peut contempler « la mère de toutes les regexps », reconnaissant une adresse en 6598 octets --- j'ai un peu la flemme de la recopier, elle n'est peut-être pas à jour.
  • [^] # Re: Sed est mon ami

    Posté par  (site web personnel) . En réponse au message Substitution avec vi. Évalué à 2.

    Pour modifier directement un ou plusieurs fichiers, GNU Sed offre

    sed -i.bak -e 's/la/LA/g' fic*.txt

    et -i tout court ne fait pas de sauvegarde.