使用bash从vsftpd日志行提取字段

时间:2019-03-04 23:07:40

标签: bash awk

嗨,我正在尝试使用bash脚本提取日期和其他字段,但会卡住。

Mon Mar 4 22:24:05 2019 [pid 18349] [myuser] OK UPLOAD: Client ::ffff:127.0.0.1, /path/to/file, 3746080 bytes, 496.03Kbyte/sec

我能够获取以下值

date = ```echo $log | awk '{print $3 FS $2 FS $5}'```
time = `echo $log | awk '{print $4}'`
action = `echo $log | awk '{print $9 FS $10}'`
size = `echo $log | awk '{print $14}'`

但是我在提取ipusername时遇到了麻烦。

for ip `echo $log | awk '{print $12}'` 

给出::ffff:127.0.0.1,如何从中提取IP 127.0.0.1?有人可以帮忙吗?谢谢

1 个答案:

答案 0 :(得分:0)

只需对您自己的代码进行一些改进:

echo $log | awk '{gsub(/[^0-9.]/,"",$12);print $12}'
127.0.0.1
echo $log | awk '{gsub(/[\[\]]/,"",$8);print $8}'
myuser

最好像这样使用它们:

ip=$(echo $log | awk '{gsub(/[^0-9.]/,"",$12);print $12}')
username=$(echo $log | awk '{gsub(/[\[\]]/,"",$8);print $8}')