Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Souci awk et builtins

12 réponses
Avatar
xavier
Bonjour,

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.

La sortie brute de

$ grep -i "^$yesterday.*new denied hosts" /var/log/denyhosts

donne :

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.

2 réponses

1 2
Avatar
LENHOF Jean-Yves
Le 17/07/2010 14:49, Xavier a écrit :
Bonjour,

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.

La sortie brute de

$ grep -i "^$yesterday.*new denied hosts" /var/log/denyhosts

donne :

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']



Pourquoi pas sed plutôt que awk ensuite ?

echo "2010-07-16 03:22:35,908 ['61.168.222.222']"|sed -e "s|['||" |sed
-e "s|']||"

Cdlt,
Avatar
Cyrille Lefevre
Le 19/07/2010 12:16, LENHOF Jean-Yves a écrit :

Pourquoi pas sed plutôt que awk ensuite ?

echo "2010-07-16 03:22:35,908 ['61.168.222.222']"|sed -e "s|['||" |sed
-e "s|']||"



Slt JY,

pourquoi 2 sed plutôt qu'1 ?

echo "2010-07-16 03:22:35,908 ['61.168.222.222']" |
sed -e "s|['||" -e "s|']||"

mais comme il y a 10 champs et non 3 ...

echo "2010-07-16 03:22:35,908 - denyhosts : INFO new denied hosts:
['61.168.222.222']" |
sed -e "s|^([^ ][^ ]*) ([^ ][^ ]*) .*['([^'][^']*)'].*|1 2 3|"

Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
1 2