Jacques L'helgoualc'h a écrit 85 commentaires

  • [^] # Re: Avec awk

    Posté par  (site web personnel) . En réponse au message Recherche script sed tout simple. Évalué à 2.

    Oui, Awk est préférable dès qu'on fait de l'arithmétique (entre autres) --- c'est plutôt NR%3==1 pour l'exemple.

    Ici, un Sed non-Gnu peut le faire aussi sans calcul apparent :
    sed -e 's/^/--> /;N;N'
    mais ça se complique quand le reste n'est pas 1...
  • # avec GNU Sed,

    Posté par  (site web personnel) . En réponse au message Recherche script sed tout simple. Évalué à 10.

    on peut sélectionner des lignes modulo n :
    sed -e '1~3s/^/--> /'
    devrait faire ce que tu demandes.

    N.B. info sed est plus complet que la page de manuel, et pour les trucs dingues, voir http://sed.sf.net/.
  • [^] # Re: tu peux facilement faire une planche contact avec montage...

    Posté par  (site web personnel) . En réponse au message Logiciel pour réaliser des planches de photos. Évalué à 3.

    si tu disposes d'ImageMagick, cf. http://www.imagemagick.org/Usage/montage/
  • [^] # Re: Euh ...

    Posté par  (site web personnel) . En réponse au message probleme recuperation de messages avec fetchmail. Évalué à 1.

    Bien, est-ce que ça marche aussi avec des mails en Bcc, ou avec plusieurs destinataires ? (le sujet revient assez souvent sur la liste Getmail).

    Si la configuration est assez standardisée, on peut générer le fichier getmailrc à partir d'une liste d'utilisateurs et un simple script shell ; si la famille s'agrandit vraiment vite, tu pourrais peut-être allonger la liste par un simple mail.

    Concernant le webmail, je ne sais pas. C'est sans doute plus fiable si chaque membre de la famille peut disposer de son maildir/ personnel...
  • [^] # Re: Euh ...

    Posté par  (site web personnel) . En réponse au message probleme recuperation de messages avec fetchmail. Évalué à 1.

    Si le compte commun est un vrai compte multi-utilisateur, Getmail (au lieu de fetchmail) sait gérer ce cas tout seul : il faut qu'il existe un en-tête fiable permettant de ventiler les mails vers toto, tata, nana, ... à partir de la boîte commune. Chercher "multidrop" dans la documentation.
    http://pyropus.ca/software/getmail/

    http://pyropus.ca/software/getmail/faq.html#faq-configuring-(...)

    Par ailleurs, avant de se lancer dans l'apprentissage de Procmail, on peut regarder Maildrop, de syntaxe plus agréable (par exemple pour le OU de deux conditions...
  • [^] # Re: j'ai pas tout compris mais

    Posté par  (site web personnel) . En réponse au message utilise une variable procmail dans shell. Évalué à 3.

    Ça ressemble à du shell, mais Procmail n'est pas un shell...

    Dans le shell-script,

    eval "$(grep -m1 '^MAILCOPY=' ~/.procmailrc)"

    devrait convenir ? ... Il peut y avoir des complications si la définition de MAILCOPY utilise d'autres variables Procmail inconnues du shell.
  • [^] # Re: sed -i

    Posté par  (site web personnel) . En réponse au message Tubes : sed vs. grep. Évalué à 1.

    Ce qui est nécessaire, c'est de commencer l'écriture au début du fichier de sortie --- les détails du sort des anciennes données dépendant du support et du système de fichiers. Dans le cas d'une ligne de commande cmd option fichier1 >fichier2 ,
    • le shell ne sait pas que fichier1 est un nom de fichier ;
    • la commande cmd ne sait pas que sa sortie standard sera détournée vers fichier2...
    Seul le noyau est en mesure de voir que les deux noms (distincts ou pas) pointent sur le même inode. Par ailleurs, sur une machine chargée, les opérations d'entrée-sortie peuvent être plus ou moins différées... On pourrait rajouter des contrôles idiot-proof, mais comme dit le proverbe, c'est alors une course avec la nature qui produit de meilleurs idiots ;)
      Pour répondre aussi à Kerro, Sed = stream editor : c'est un éditeur de flux, au code très comapct, qui s'occupe surtout de traiter son flux de données. L'option -i est juste un cadeau aux fainéants pour ne pas avoir à gérer le fichier temporaire (et, accessoirement, leur évite de se tirer une balle dans le pied avec <fic >fic ). On trouvera des discussions plus approfondies sur les redirections du shell sur news:fr.comp.os.unix, ou dans l'Advanced Bash-scripting Guide (traduit en français).
    • [^] # Re: sed -i

      Posté par  (site web personnel) . En réponse au message Tubes : sed vs. grep. Évalué à 1.

      Il me semble bien l'avoir vu marcher de temps en temps...
      Dans ta description, tu ne précises pas que dans cmd fichier , c'est cmd qui s'occupe d'ouvrir son fichier argument --- mais ne sait pas où va finalement sa sortie; une variante est cmd <fichier , où c'est le shell qui met aussi en place l'entrée.

      Il se pourrait que la lecture du ou des premiers blocs se fasse parfois avant l'ouverture effective en écriture, suivant comment le noyau ordonnance ses opérations.

      Avec le rm $1, un seul nom est utilisé, mais la sortie doit se faire vers un autre inode, celui de la lecture continuant à pointer sur l'ancien, qui n'est pas réalloué tant que l'opération de lecture n'est pas terminée, même si le nom est déjà effacé... Cette méthode ne fonctionnera pas « bien » quand il y a plusieurs liens durs vers le même inode.
    • [^] # Re: sed -i

      Posté par  (site web personnel) . En réponse au message Tubes : sed vs. grep. Évalué à 3.

      Grep est surtout un outil de lecture sélective ; les seules options permettant de modifier un peu la sortie sont -o et --color.
      Sed, lui, est un éditeur ;) --- pour GNU Sed, info sed est plus complet que la page de manuel. Voir aussi http://sed.sf.net/ ...

      Les deux commandes ci-dessus ne sont pas strictement équivalentes, grep -v 'regexp' supprimant les lignes quand sed -e 's/regexp//' se contente de supprimer le motif reconnu, et donc donne au moins une ligne vide. L'équivalent serait plutôt sed -e '/regexp/d' (aux nuances d'écriture de la regexp près).

      L'ouverture en lecture et écriture du même fichier est à proscrire totalement.
    • [^] # Re: Variables Procmail

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

      Attention, procmail ne connaît pas l'expansion du tilde, donc il faut plutôt utiliser $HOME ! Pour références, man procmail , man procmailrc , man procmailex.

      N.B. pour réduire l'arrachage des cheveux, on peut préférer maildrop à procmail...
    • # http://www.imagemagick.org/Usage/thumbnails/

      Posté par  (site web personnel) . En réponse au message redimensionnement Imagemagick et forme ronde. Évalué à 4.

      propose aussi un découpage en forme de cœur...
    • # abcde

      Posté par  (site web personnel) . En réponse au message Script pour encoder des cd audio en ogg. Évalué à 4.

      offre aux fainéants l'option -x , mais il faut tout de même enlever le disque du tiroir à la main...
    • # man gawk, /gensub

      Posté par  (site web personnel) . En réponse au message Filtrage avec awk. Évalué à 4.


      $ echo a b c 01/05/2008 e f |gawk '{$4=gensub("([0-9]+)/([0-9]+)/([0-9]+)","\\3-\\2-\\1",1,$4);print$4}'
      2008-05-01

      ou voir la fonction split().
    • [^] # Re: Trouvé, heu, non...

      Posté par  (site web personnel) . En réponse au message script sed qui ne fonctionne pas. Évalué à 1.

      • Ce code simplifié va inclure le fichier « toto.h » en argument pour chaque ligne « INCLUDE » figurant dans le fichier traité...
      • Le script initial ne le fait que pour les « #INCLUDE <toto.h> » --- mais ne marchera pas très bien avec un souligné dans le nom de fichier à inclure.
    • [^] # Re: sed, ou stat

      Posté par  (site web personnel) . En réponse au message diverses questions : permissions, bash/exec, suid et sed. Évalué à 2.

      Pour extraire les permissions de /tmp/, ça va, mais pour un répertoire quelconque,

      ls -ld /usr/ | sed -n -e 's/^\([a-z-]*\).*/\1/p'

      serait mieux -- l'option g est inutile, il ne peut y avoir plusieurs remplacements avec l'ancre ^.

      Une solution plus simple est

      stat -c'%A' /tmp/

      (man stat pour les formats disponibles).
    • [^] # Re: Regexps ...

      Posté par  (site web personnel) . En réponse au message Extraire un bout de chaîne. Évalué à 1.

      Oui --- les lettres en rab sont juste une précaution générale ; dans ce cas précis, si tu es sûr d'avoir tes huit chiffres de date entre deux /, c'est encore mieux de remplacer les deux balises « non-chiffre » [^0-9]. Comme c'est aussi le délimiteur habituel de la substitution de Sed, il suffit d'utiliser un autre caractère (sinon, il faut taper \/ comme tu l'as fait, c'est déjà assez illisible comme ça :).
      La commande

      sed -e 's,^.*/\(20[0-9][0-9][01][0-9][0-3][0-9]\)/.*$,\1,'

      devrait marcher ; j'ai laissé les ancres ^ et $ pour la lisibilité, mais elles sont superflues, et l'option g n'est pas utile, il n'y a qu'une substitution possible.

      J'ai aussi remplacé le deuxième zéro, sinon ça ne marcherait plus dès 2010.
    • [^] # Re: Regexps ...

      Posté par  (site web personnel) . En réponse au message Extraire un bout de chaîne. Évalué à 2.

      • J'ajoute deux lettres (des non-chiffres) autour de la chaîne à tester ;
      • et je construit la regexp
        1. le début, terminé par un non-chiffre : ^.*[^0-9]
        2. entre parenthèses \(...\), la sous-regexp de date du XXIème siècle (avec une vingtaine de mois qui peuvent avoir quarante jours, mais bon...)
        3. un non-chiffre, et la suite jusqu'à la fin.
        Sans les lettres d'encadrement, il faudrait remplacer le début de la regexp par ^\(.*[^0-9]\)\? pour le rendre facultatif, et changer le numéro du bloc conservé, qui passerait en \2 --- de même pour la fin, qui pourrait aussi être vide. Remarque : comme le premier .* est « avide », la date extraite est la dernière de la chaîne. Si ça ne convient pas, les regexps de Perl sont plus souples.
    • [^] # Re: Regexps ...

      Posté par  (site web personnel) . En réponse au message Extraire un bout de chaîne. Évalué à 2.

      On peut contrôler les extémités, et restreindre un peu la regexp de date (du coup, ça ne marchera plus après 2099 :)

      ~ $ chemin='./abc/20010101/xy/12345678910/ssss20123456'
      ~ $ echo "A${chemin}Z" |sed -e 's/.*[^0-9]\(20[0-9][0-9][01][0-9][0123][0-9]\)[^0-9].*$/\1/g'
      20010101
    • # grep --help

      Posté par  (site web personnel) . En réponse au message Recherche de motifs via un fichier. Évalué à 1.

      donne l'option -f, --file=FILE , et donc : grep -f file1 file2 devrait convenir.
    • [^] # Re: non, pas mpage...

      Posté par  (site web personnel) . En réponse au message imprimer une page sur plusieurs feuilles (pour agrandir). Évalué à 3.

      ...mais : ~ $ apt-cache search poster [...] poster - Create large posters out of PostScript pages shanty - makes a whopping great postscript file from an image and some text [...]
    • [^] # Re: non, pas mpage...

      Posté par  (site web personnel) . En réponse au message imprimer une page sur plusieurs feuilles (pour agrandir). Évalué à 1.

      Désolé, ce n'est pas "multiple sheets per page" :/
    • # En PostScript avec pstops

      Posté par  (site web personnel) . En réponse au message imprimer une page sur plusieurs feuilles (pour agrandir). Évalué à 1.

      ... qui fait partie des psutils : (une seule ligne) $ pstops -p a4 '0@2(0w,0h),0@2(0w,-1h),0@2(-1w,0h),0@2(-1w,-1h)' origA4.ps agrandi4xA4.ps [1] [2] [3] [4] Wrote 4 pages, 1548658 bytes Il faudra ajuster les translations (x,y) et le rapport @2 en fonction des marges réelles de l'imprimante. Sinon, il y a aussi mpage mpage (1) - print multiple pages per sheet on PostScript printer Hop zat elpse.
    • [^] # Re: UUOC

      Posté par  (site web personnel) . En réponse au message Récupération en shell script de valeurs de lignes dans un fichier. Évalué à 1.

      Si on préfère ne pas trier,
       awk '!n[$0]++'
      
      n'affichera que le premier exemplaire de chaque ligne.
    • [^] # Re: Comment changer le signe sous DIA?

      Posté par  (site web personnel) . En réponse au message DIA mauvaise place du texte dans les fichiers exportés EPS PSTRICKS. Évalué à 1.

      Si le décalage de position est horizontal, avec une ampleur d'une espace environ, c'est peut-être un problème de << spurious blank >> : ça se résout alors en mettant des caractères % en fin de ligne de code.

      Pour DIA, je ne sais pas, désolé.
    • [^] # En fait, c'est facile...

      Posté par  (site web personnel) . En réponse au message DIA mauvaise place du texte dans les fichiers exportés EPS PSTRICKS. Évalué à 1.

      ... le problème, c'est que la figure déborde de la page :/ Avec ce fichier latex,
      \documentclass{article}
      \usepackage{pstricks}
      \begin{document}
      Haut de page,
      \vfill
      
      bla bla avant,
      \input{Diagramme1.tex}
      bla bla ensuite,
      \vfill
      
      Bas de page.
      \end{document}
      
      la figure est centrée verticalement, et on voit les textes dans la page --- chez moi en PostScript --- et j'ai aussi changé le signe de y dans le rput final
            \rput[l](4.098427,4.987385){%
              Ici
              \psscalebox{1 -1}{\$\textbackslash{}alpha\$}}
          }
          Ailleurs
      
      (on s'y perd un peu avec les psscalebox{1 -1}).