|
|
|
|
Bonjour,
Je me penche actuellement faire un petit script shell qui convertit les logs weechat en format de logs irssi et j'aurais pour cela besoin d'un peu d'aide.
En effet j'ai besoin de combiner un sed et un awk, je m'explique:
sed -i 's/REGEXP/awk sur ce que match la REGEXP/g' log
Configuration: Linux Firefox 2.0.0.6
Salut,
|
En entré un fichier du type :
11:11:11 < user> Bonjour 22:22:22 <-- admin has kicked user from #chan 23:33:33 < user> Au revoir en sortie il me faut : 11:11:11 < user> Bonjour 22:22:22 -!- user was kicked from #chan by admin 23:33:33 < user> Au revoir avec "#chan", "admin" et "user" pouvant changer Pour le moment j'ai quelque chose qui ressemble à ça, mais il faudrais que j'arrive a recuperer ce qui match avec ma regexp pour le piper avec awk: sed -i 's/[0-9]{2}:[0-9]{2}:[0-9]{2} <-- .[^ ]+ has kicked .[^ ]+ from/awk -F ' ' '{ print $1" -!- "$6" was kicked from "$8" by "$3" ["$3"]" }'/g' log_file
J'espère que c'est un peu plus clair... En tout cas merci beaucoup pour la rapidité de la reponse ! |
Et simplement avec "awk" ç'est pas bon ? awk ' $5 !~ /kicked/ { print $0} $5 ~ /kicked/ { print $1" -!- "$6" was kicked from "$8" by "$3 }' fichierCe qui donne :$ cat plop
11:11:11 < user> Bonjour
22:22:22 <-- admin has kicked user from #chan
23:33:33 < user> Au revoir
$ awk ' $5 !~ /kicked/ { print $0} $5 ~ /kicked/ { print $1" -!- "$6" was kicked from "$8" by "$3 }' plop
11:11:11 < user> Bonjour
22:22:22 -!- user was kicked from #chan by admin
23:33:33 < user> Au revoir
$;-))
Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé. |
Est ce que ca remplace toutes les occurrences si il y en a plusieurs (avec des user et admin différents)
|
Tiens essaye ça aussi avec "sed" : sed -r '/kicked/ s/([^ ]*) <-- ([^ ]*) has kicked ([^ ]*) from (.*)/\1 -!- \3 was kicked from \4 by \2/' plopCe qui donne avec des admins et des users différents : $ cat plop 11:11:11 < user> Bonjour 22:22:22 <-- admin has kicked user from #chan 23:33:33 < user> Au revoir 1:11:11 < user> Bonjour 22:22:22 <-- admin1 has kicked user1 from #chan 23:33:33 < user> Au revoir 1:11:11 < user> Bonjour 22:22:22 <-- admin2 has kicked user2 from #chan 23:33:33 < user> Au revoir 1:11:11 < user> Bonjour 22:22:22 <-- toto has kicked charlot from #chan 23:33:33 < user> Au revoir $ sed -r '/kicked/ s/([^ ]*) <-- ([^ ]*) has kicked ([^ ]*) from (.*)/\1 -!- \3 was kicked from \4 by \2/' plop 11:11:11 < user> Bonjour 22:22:22 -!- user was kicked from #chan by admin 23:33:33 < user> Au revoir 1:11:11 < user> Bonjour 22:22:22 -!- user1 was kicked from #chan by admin1 23:33:33 < user> Au revoir 1:11:11 < user> Bonjour 22:22:22 -!- user2 was kicked from #chan by admin2 23:33:33 < user> Au revoir 1:11:11 < user> Bonjour 22:22:22 -!- charlot was kicked from #chan by toto 23:33:33 < user> Au revoir $Et idem avec "awk" : $ awk ' $5 !~ /kicked/ { print $0} $5 ~ /kicked/ { print $1" -!- "$6" was kicked from "$8" by "$3 }' plop
11:11:11 < user> Bonjour
22:22:22 -!- user was kicked from #chan by admin
23:33:33 < user> Au revoir
1:11:11 < user> Bonjour
22:22:22 -!- user1 was kicked from #chan by admin1
23:33:33 < user> Au revoir
1:11:11 < user> Bonjour
22:22:22 -!- user2 was kicked from #chan by admin2
23:33:33 < user> Au revoir
1:11:11 < user> Bonjour
22:22:22 -!- charlot was kicked from #chan by toto
23:33:33 < user> Au revoirPour les explications avec "awk" :
$5 !~ /kicked/ { print $0} Si le champ 5 ($5) est différent ( !~) du mot "kicked" on imprime la ligne $5 ~ /kicked/ { print $1...$6... } Si le champ 5 ($5) est identique (~) au mot "kicked" on imprime la ligne formatée Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé. |