Bon,

Tu as là quelque chose qui ressemble un peu du obfuscated code.

Peut-être tu pourras quelque chose de plus lisible avec Perl, mas ça ne serait pas assez « fun » :-)

Le 05. 11. 11 10:57, Félix Hauri a écrit :
On Thu, Nov 03, 2011 at 11:01:30PM +0100, Jean-Pierre Rupp wrote:
Nice hacks!
Merci, mais je me disais qu'on *doit* pouvoir faire plus ``simple''...
(sed est un outil puissant!)

Le 2 novembre 2011 15:26, Félix Hauri<[email protected]>  a écrit :
$ eval $(
    env LANG=fr_CH date +"$(
        date --help |
            sed -ne '/^  %[^ %]\{1,4\} .*$/{
                s/^  %\([^ ]*\) .*$/\1/;
                y|:|_|;
                p;
                y|_|:|;
                p}' |
        xargs printf "DATE_%s=\"%%%s\" "
        )"
    )
...
$ echo $DATE_{x,X}
02. 11. 11 15:14:39
$ eval $(
     env LANG=fr_CH date +"$(
        date --help |
            sed -ne '/^  %[^ %]\{1,4\} .*$/{
                 s/^ *%\([^ ]*\) .*$/DATE_\1=\"%\1\"/;
                :l;
                /[^:%]:/{
                    s/:/_/;
                    tl};
                p}'
        )"
     )
$ echo $DATE_{x,X}
05. 11. 11 10:33:40

Au passage, vous aviez bien sûr compris que si ``LANG=C'' au lieu
de ``LANG=fr_CH'', alors:
$ echo $DATE_{x,X}
11/05/11 10:31:26
de même que si ``LANG=fr_CH.UTF-8'', alors $DATE_B pourrait donner:
``février'', en particulier dans une console en Latin-1:

$ eval $(env LANG=fr_CH.UTF-8 date -d '2000/02/01 12:34:56' +"$(date --help |
     sed -ne '/^  %[^ %]\{1,4\} .*$/{s/^ *%\([^ ]*\) .*$/DATE_\1=\"%\1\"/;
              :l;/[^:%]:/{s/:/_/;tl};p}')")

$ echo $DATE_{A,d,B,Y,T}
mardi 01 février 2000 12:34:56

(Dois-je préciser que j'utilise le charset Latin-1!?)


_______________________________________________
gull mailing list
[email protected]
http://forum.linux-gull.ch/mailman/listinfo/gull

Répondre à