[jeu] Sedegrepez-moi ces mailboxes !

Répondre
Partager Rechercher
Message supprimé par son auteur.
Message supprimé par son auteur.
Désolé je n'ai pas testé le script, je te laissais la joie des correctifs

Tu as bien corrigé la syntaxe du sort, et j'avais mal pensé mon truc, il faut faire un sort multi colonnes, je ne sais plus si c'est possible directement et je n'ai pas de man sous la main.

Le for est effectivement inutile. Je ne comprend pas ce que tu veux dire par exclusion donc le reste est obscur

pour degager les lignes qui ne contiennent pas de crochets tu dois pouvoir le faire en ajoutant a peu pres la meme chose que dans le sed dans le grep discriminant :

cat /var/mail/boite? | grep '^Recieved:.*\[[0-9]\.[0-9]\.[0-9]\.[0-9]\]' | sed ...
Message supprimé par son auteur.
Message supprimé par son auteur.
[abc] c'est la classe qui accèpte les caractères a,b,c. Je parle de despécialiser lorsqu'on utilise \ pour faire en sorte que sed n'interprète pas [ comme le début d'une classe mais comme un simple caractère.

En fait ca m'amuse, je vais essayer de le faire complètement, je viens de retrouver ma clef ssh ej vais donc avoir une machine
sed -n 's/^Recieved:.*\([0-9]\+\.[0-9]\+.[0-9]\+\.[0-9]\+\).*$/\1/p' /var/mail/boites? fait tout en une passe (plus besoin de grep ni de tubes pour cette partie). Reste le probleme du sort (et bien sur le probleme de ne conserver que le dernier avant X-).
Message supprimé par son auteur.
-n supprime l'echo systèmatique. L'intéret ici c'est que ca évite que les lignes non modifiées ressortent sur la sortie. On utilise alors l'option p pour forcer l'ecriture des lignes qui sont modifiées.

J'ai oublié les \[ \] autour des parentheses mais sinon ca marche (j'ai testé cette fois).

sed -n 's/^Recieved:.*\[\([0-9]\+\.[0-9]\+.[0-9]\+\.[0-9]\+\)\].*$/\1/p' /var/mail/boites?
Message supprimé par son auteur.
Message supprimé par son auteur.
Citation :
Publié par Canivo
J'aurais donc un problème de config ?

Soyons bien clairs. Chez moi :

echo bonjour | sed -r "s/[^[]/B/"

donne :

sed: -e expression n°1, caractère 9: unterminated `s' command

Là où chez toi, on obtient bien :

Bonjour

...?
idem pour moi, ca donne
Bonjour

j'ai une debian unstable et GNU sed version 4.1.4
Mon dieu, j'ai l'impréssion d'être sur Mars quand je lis vos posts ...
Je n'interviens pas à des fins floodesques mais juste pour vous montrer mon respect à vous qui maîtrisez ce language si compliqué et ... vide de sens pour moi qui n'y connaît rien.
Message supprimé par son auteur.
Personellement, j'aurais fait du
Code:
sed -n '/^Received:/s/^.*\[\([0-9]\?[0-9]\?[0-9]\.[0-9]\?[0-9]\?[0-9]\.[0-9]\?[0-9]\?[0-9]\)\.[0-9]\?[0-9]\?[0-9]\].*$/\1/p' mailbox0* |sort -n -t .
Le /^Received:/ permet de ne considérer que les lignes qui commencent par Received:

Sinon, pour le tri tel que tu le veux, je ne pense pas que sort soit capable de le faire.
Par contre, tu peux utiliser awk pour afficher le nombre en hexadécimal, en mettant en 2e colonne l'adresse IP normale, utiliser sort pour ordonner les lignes, puis re-awk pour ne garder que la 2e colonne :

Code:
...| awk -F '.' '{printf "%02x%02x%02x%02x ", $1,$2,$3,$4; print $_}' | sort -n | awk '{print $2}
À noter qu'on peut directement utiliser awk pour filtrer le tout :
Code:
cat /var/mail/boite* | awk -F '[][]' '/^Received:/{split($2,a,"."); printf "%02x%02x%02x%02x ",a[1], a[2], a[3], a[4]; print a[1]"."a[2]"."a[3]"."a[4]}' | sort -n | awk '{print $2}'
Voilà, pour le filtrage, gerp -v me semble pas si mal...
Sinon tu peux mettre dans le awk un if :
Code:
awk -F '[][]' '/^Received:/{if ($2!="127.0.0.1"){split($2,a,"."); printf "%02x%02x%02x%02x ",a[1], a[2], a[3], a[4]; print a[1]"."a[2]"."a[3]"."a[4]}}'
Message supprimé par son auteur.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés