在我所做的这行代码上使用的最佳循环是什么,它通过一个日志文件并find在$6
中失败的行? BASH和LINUX相当新鲜,不能得到任何循环正常工作。
Sep 13 12:09:39 icarus sshd[14043]: Failed none for invalid user 55659 Sep 13 12:09:43 icarus sshd[14043]: pam_unix(sshd:auth): check pass; user unknown Sep 13 12:09:43 icarus sshd[14043]: pam_unix(sshd:auth): Sep 13 12:09:44 icarus sshd[14043]: Failed password for invalid user 55659 Sep 13 12:09:48 icarus sshd[14043]: pam_unix(sshd:auth): check pass; user unknown Sep 13 12:09:50 icarus sshd[14043]: Failed password for invalid user 55659 from
示例命令
cat auth.log | sed -e 's/,//g' | awk -F" " '{print $6}'
$ grep Failed auth.log Sep 13 12:09:39 icarus sshd[14043]: Failed none for invalid user 55659 Sep 13 12:09:44 icarus sshd[14043]: Failed password for invalid user 55659 Sep 13 12:09:50 icarus sshd[14043]: Failed password for invalid user 55659 from
如果你想使用awk:
awk -F" " -e '/Failed/ {print $0}' auth.log
不需要sed或cat。
这将查找包含“失败”(区分大小写)的行,并简单地打印它们,
awk '/Failed/ {print $0}' auth.log
我相信这是你正在寻找的。
而不是打印$6
,只需打印$6
匹配“失败”的行:
你有过
cat auth.log | sed -e 's/,//g' | awk -F" " '{print $6}'
您可以使用
sed -e 's/,//g' auth.log | awk '$6=="Failed"'
(正如其他人指出的那样, sed
可以将文件名作为参数, awk
默认打断空白,所以不需要指定-F
参数。)
(你的示例输入没有逗号,所以你可能甚至不需要sed
命令。)