Parti de la constation que c'était gavant que denyhosts m'envoie une vingtaine de
mails par jour, j'ai désactivé la fonction mail, et rajouté un script dans
periodic/security.
2010-07-16 03:22:35,908 - denyhosts : INFO new denied hosts: ['61.168.222.222']
Bon, pas dur, en pipant dans awk '{ print $1" "$2" "$10}' j'obtiens :
2010-07-16 03:22:35,908 ['61.168.222.222']
qui est nettement plus concis. Maintenant, comme il me reste un ou deux drosos sous
la main, je voudrais nettoyer les [''] pour passer le résultat à un resolveur
quelconque.
Et c'est là que ça se gâte. Je ne parviens pas à escaper les caractères [''] :
awk '{ print $1" "$2" "gsub("\[", "", $10)}'
awk: nonterminated character class [
source line number 1
context is
{ print $1" "$2" " gsub("\[", "", >>> $10) <<<
Pourtant la doc de awk dit bien que le backslash est le caractère d'escape.
Y'a quoi que j'ai pas compris ? C'est vrai que awk n'est pas mon truc de tous les
jours, je suis un "one liner", et je le ferais sans doute en 5 mn en Perl. Mais si je
mourais demain, je serais aussi bête qu'aujourd'hui, et ça c'est pas bon pour le
karma :-)
Merci,
--
XAv
In your pomp and all your glory you're a poorer man than me,
as you lick the boots of death born out of fear.
La fonction gsub ne voit jamais le caractère backslash, il a déjà été interprété par le parseur de chaînes de caractères.
Donc, point de salut hors du sprintf suggéré par Christophe ?
Ca va donc se terminer en Perl :-)
Merci,
-- XAv In your pomp and all your glory you're a poorer man than me, as you lick the boots of death born out of fear.
xtof pernod
Le 17/07/2010 15:09, xtof pernod a fait rien qu'à écrire:
Le 17/07/2010 14:49, Xavier a fait rien qu'à écrire:
(Oups.. j'ai lu un peu vite, je reprends -- bien q'amha, pour une simple supression de caracteres, tr -d "[']" le fera.)
Et c'est là que ça se gâte. Je ne parviens pas à escaper les caractères [''] :
En fait c'est les /chaines/ "['" et "']" que tu veux bouffer..
Il me souvient avoir cherché et n'avoir trouvé que cette ruse: awk '{ c=sprintf("%c",0x27); gsub(c,"*"); print }'
Et donc pour ton cas de figure: # awk 'BEGIN { c=sprintf("%c",0x27); } { sub( "[" c, "" ); sub( c "]", "" ); print }' sqdfqsdf ['kjjmlkjmlk'] xx sqdfqsdf kjjmlkjmlk xx
(double '' pour qu'un arrive jusqu'à gsub() =)
-- christophe.
Le 17/07/2010 15:09, xtof pernod a fait rien qu'à écrire:
Le 17/07/2010 14:49, Xavier a fait rien qu'à écrire:
(Oups.. j'ai lu un peu vite, je reprends -- bien q'amha, pour une simple
supression de caracteres, tr -d "[']" le fera.)
Et c'est là que ça se gâte. Je ne parviens pas à escaper les caractères [''] :
En fait c'est les /chaines/ "['" et "']" que tu veux bouffer..
Il me souvient avoir cherché et n'avoir trouvé que cette ruse:
awk '{ c=sprintf("%c",0x27); gsub(c,"*"); print }'
Et donc pour ton cas de figure:
# awk 'BEGIN { c=sprintf("%c",0x27); }
{ sub( "\[" c, "" ); sub( c "\]", "" ); print }'
sqdfqsdf ['kjjmlkjmlk'] xx
sqdfqsdf kjjmlkjmlk xx
Le 17/07/2010 15:09, xtof pernod a fait rien qu'à écrire:
Le 17/07/2010 14:49, Xavier a fait rien qu'à écrire:
(Oups.. j'ai lu un peu vite, je reprends -- bien q'amha, pour une simple supression de caracteres, tr -d "[']" le fera.)
Et c'est là que ça se gâte. Je ne parviens pas à escaper les caractères [''] :
En fait c'est les /chaines/ "['" et "']" que tu veux bouffer..
Il me souvient avoir cherché et n'avoir trouvé que cette ruse: awk '{ c=sprintf("%c",0x27); gsub(c,"*"); print }'
Et donc pour ton cas de figure: # awk 'BEGIN { c=sprintf("%c",0x27); } { sub( "[" c, "" ); sub( c "]", "" ); print }' sqdfqsdf ['kjjmlkjmlk'] xx sqdfqsdf kjjmlkjmlk xx
(double '' pour qu'un arrive jusqu'à gsub() =)
-- christophe.
Nicolas George
Xavier wrote in message <1jls553.m8bpoc1hjgemmN%:
Donc, point de salut hors du sprintf suggéré par Christophe ?
Bien sûr que si : se débrouiller pour que la chaîne de caractère passée à gsub contienne le caractère . Il y a une manière standard et documentée de le faire, et le warning affiché indique où chercher.
Xavier wrote in message <1jls553.m8bpoc1hjgemmN%xavier@groumpf.org>:
Donc, point de salut hors du sprintf suggéré par Christophe ?
Bien sûr que si : se débrouiller pour que la chaîne de caractère passée à
gsub contienne le caractère . Il y a une manière standard et documentée de
le faire, et le warning affiché indique où chercher.
Donc, point de salut hors du sprintf suggéré par Christophe ?
Bien sûr que si : se débrouiller pour que la chaîne de caractère passée à gsub contienne le caractère . Il y a une manière standard et documentée de le faire, et le warning affiché indique où chercher.
Benoit Izac
Bonjour,
le 17/07/2010 à 14:49, (Xavier) a écrit dans le message <1jls33e.uaqy0i1pt2gchN% :
Parti de la constation que c'était gavant que denyhosts m'envoie une vingtaine de mails par jour, j'ai désactivé la fonction mail, et rajouté un script dans periodic/security.
2010-07-16 03:22:35,908 - denyhosts : INFO new denied hosts: ['61.168.222.222']
Bon, pas dur, en pipant dans awk '{ print $1" "$2" "$10}' j'obtiens :
2010-07-16 03:22:35,908 ['61.168.222.222']
qui est nettement plus concis. Maintenant, comme il me reste un ou deux drosos sous la main, je voudrais nettoyer les [''] pour passer le résultat à un resolveur quelconque.
Et c'est là que ça se gâte. Je ne parviens pas à escaper les caractères [''] :
C'est peu lisible mais ça vire bien « [' » et « '] » :
le 17/07/2010 à 14:49, xavier@groumpf.org (Xavier) a écrit dans le
message <1jls33e.uaqy0i1pt2gchN%xavier@groumpf.org> :
Parti de la constation que c'était gavant que denyhosts m'envoie une
vingtaine de mails par jour, j'ai désactivé la fonction mail, et
rajouté un script dans periodic/security.
2010-07-16 03:22:35,908 - denyhosts : INFO new denied hosts: ['61.168.222.222']
Bon, pas dur, en pipant dans awk '{ print $1" "$2" "$10}' j'obtiens :
2010-07-16 03:22:35,908 ['61.168.222.222']
qui est nettement plus concis. Maintenant, comme il me reste un ou
deux drosos sous la main, je voudrais nettoyer les [''] pour passer le
résultat à un resolveur quelconque.
Et c'est là que ça se gâte. Je ne parviens pas à escaper les
caractères [''] :
C'est peu lisible mais ça vire bien « [' » et « '] » :
le 17/07/2010 à 14:49, (Xavier) a écrit dans le message <1jls33e.uaqy0i1pt2gchN% :
Parti de la constation que c'était gavant que denyhosts m'envoie une vingtaine de mails par jour, j'ai désactivé la fonction mail, et rajouté un script dans periodic/security.
2010-07-16 03:22:35,908 - denyhosts : INFO new denied hosts: ['61.168.222.222']
Bon, pas dur, en pipant dans awk '{ print $1" "$2" "$10}' j'obtiens :
2010-07-16 03:22:35,908 ['61.168.222.222']
qui est nettement plus concis. Maintenant, comme il me reste un ou deux drosos sous la main, je voudrais nettoyer les [''] pour passer le résultat à un resolveur quelconque.
Et c'est là que ça se gâte. Je ne parviens pas à escaper les caractères [''] :
C'est peu lisible mais ça vire bien « [' » et « '] » :
En bien plus lisible : awk '{gsub("[^0-9.]", "", $10); print $1" "$2" "$10}'
-- Benoit Izac
xavier
Benoit Izac wrote:
gsub("[^0-9.]"
Arrrgh ! Pourquoi n'y avais-je pas pensé ! Le genre de truc qui me vient tout de suite à l'esprit quand je bosses avec des PCRE, mais là, outil pas familier, toussa ..
Merci,
-- XAv In your pomp and all your glory you're a poorer man than me, as you lick the boots of death born out of fear.
Benoit Izac <use.reply.to@INVALID.ADDRESS> wrote:
gsub("[^0-9.]"
Arrrgh ! Pourquoi n'y avais-je pas pensé ! Le genre de truc qui me vient
tout de suite à l'esprit quand je bosses avec des PCRE, mais là, outil
pas familier, toussa ..
Merci,
--
XAv
In your pomp and all your glory you're a poorer man than me,
as you lick the boots of death born out of fear.
Arrrgh ! Pourquoi n'y avais-je pas pensé ! Le genre de truc qui me vient tout de suite à l'esprit quand je bosses avec des PCRE, mais là, outil pas familier, toussa ..
Merci,
-- XAv In your pomp and all your glory you're a poorer man than me, as you lick the boots of death born out of fear.
Cyrille Lefevre
Le 17/07/2010 15:11, Nicolas George a écrit :
Xavier wrote in message<1jls33e.uaqy0i1pt2gchN%:
{ print $1" "$2" " gsub("[", "",>>> $10)<<< Pourtant la doc de awk dit bien que le backslash est le caractère d' escape.
La fonction gsub ne voit jamais le caractère backslash, il a déjà été interprété par le parseur de chaînes de caractères.
Bonjour,
plus précisément, en awk, il existe 2 notation en ce qui concerne les expressions rationnelles : /.../ et "..." dans le cas des ", il faut doubler les pour la raison énoncée ci-dessus, ce qui donne : /[/ == "[" pour sub/gsub, il faudrait idéalement toujours utiliser des /.../, pb s i la partie droite est variable, ce qui oblige de passer en mode ".
ex. (tous équivalent) :
gsub(/[/, "")
gsub("[", "")
se="["; re="" gsub(se, re)
Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre.
Le 17/07/2010 15:11, Nicolas George a écrit :
Xavier wrote in message<1jls33e.uaqy0i1pt2gchN%xavier@groumpf.org>:
{ print $1" "$2" " gsub("[", "",>>> $10)<<<
Pourtant la doc de awk dit bien que le backslash est le caractère d' escape.
La fonction gsub ne voit jamais le caractère backslash, il a déjà été
interprété par le parseur de chaînes de caractères.
Bonjour,
plus précisément, en awk, il existe 2 notation en ce qui concerne
les expressions rationnelles : /.../ et "..."
dans le cas des ", il faut doubler les pour la raison énoncée
ci-dessus, ce qui donne : /[/ == "\["
pour sub/gsub, il faudrait idéalement toujours utiliser des /.../, pb s i
la partie droite est variable, ce qui oblige de passer en mode ".
ex. (tous équivalent) :
gsub(/[/, "")
gsub("\[", "")
se="\["; re=""
gsub(se, re)
Cordialement,
Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%nospam@laposte.net.invalid
supprimer "%nospam% et ".invalid" pour me repondre.
La fonction gsub ne voit jamais le caractère backslash, il a déjà été interprété par le parseur de chaînes de caractères.
Bonjour,
plus précisément, en awk, il existe 2 notation en ce qui concerne les expressions rationnelles : /.../ et "..." dans le cas des ", il faut doubler les pour la raison énoncée ci-dessus, ce qui donne : /[/ == "[" pour sub/gsub, il faudrait idéalement toujours utiliser des /.../, pb s i la partie droite est variable, ce qui oblige de passer en mode ".
ex. (tous équivalent) :
gsub(/[/, "")
gsub("[", "")
se="["; re="" gsub(se, re)
Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre.
Cyrille Lefevre
Le 17/07/2010 15:32, xtof pernod a écrit :
Le 17/07/2010 15:09, xtof pernod a fait rien qu'à écrire:
Le 17/07/2010 14:49, Xavier a fait rien qu'à écrire:
(Oups.. j'ai lu un peu vite, je reprends -- bien q'amha, pour une simpl e supression de caracteres, tr -d "[']" le fera.)
attention, selon l'os, cela peut ne correspondre qu'à ', cf. RATIONALE dans http://www.opengroup.org/onlinepubs/9699919799/utilities/tr.html
mieux vaut écrire "'[]" afin d'éviter toutes ambiguïtés...
Et c'est là que ça se gâte. Je ne parviens pas à escaper les caractères [''] :
En fait c'est les /chaines/ "['" et "']" que tu veux bouffer..
Il me souvient avoir cherché et n'avoir trouvé que cette ruse: awk '{ c=sprintf("%c",0x27); gsub(c,"*"); print }'
Et donc pour ton cas de figure: # awk 'BEGIN { c=sprintf("%c",0x27); }
0x... n'est pas portable en awk... gnu ok sauf si --posix, pas les autres .
solution simple et portable :
awk -v q="'" -v dq='"' '{c=q}
{ sub( "[" c, "" ); sub( c "]", "" ); print }' sqdfqsdf ['kjjmlkjmlk'] xx sqdfqsdf kjjmlkjmlk xx
(double '' pour qu'un arrive jusqu'à gsub() =)
Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre.
Le 17/07/2010 15:32, xtof pernod a écrit :
Le 17/07/2010 15:09, xtof pernod a fait rien qu'à écrire:
Le 17/07/2010 14:49, Xavier a fait rien qu'à écrire:
(Oups.. j'ai lu un peu vite, je reprends -- bien q'amha, pour une simpl e
supression de caracteres, tr -d "[']" le fera.)
attention, selon l'os, cela peut ne correspondre qu'à ', cf. RATIONALE
dans http://www.opengroup.org/onlinepubs/9699919799/utilities/tr.html
mieux vaut écrire "'[]" afin d'éviter toutes ambiguïtés...
Et c'est là que ça se gâte. Je ne parviens pas à escaper les caractères [''] :
En fait c'est les /chaines/ "['" et "']" que tu veux bouffer..
Il me souvient avoir cherché et n'avoir trouvé que cette ruse:
awk '{ c=sprintf("%c",0x27); gsub(c,"*"); print }'
Et donc pour ton cas de figure:
# awk 'BEGIN { c=sprintf("%c",0x27); }
0x... n'est pas portable en awk... gnu ok sauf si --posix, pas les autres .
solution simple et portable :
awk -v q="'" -v dq='"' '{c=q}
{ sub( "\[" c, "" ); sub( c "\]", "" ); print }'
sqdfqsdf ['kjjmlkjmlk'] xx
sqdfqsdf kjjmlkjmlk xx
(double '' pour qu'un arrive jusqu'à gsub() =)
Cordialement,
Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%nospam@laposte.net.invalid
supprimer "%nospam% et ".invalid" pour me repondre.