我在这行代码中使用的最佳循环是什么,它通过一个日志文件找到$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}'
答案 0 :(得分:1)
$ 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
答案 1 :(得分:0)
如果你想使用awk:
awk -F" " -e '/Failed/ {print $0}' auth.log
没有必要使用sed或cat。
答案 2 :(得分:0)
这会查找包含“Failed”(区分大小写)并且只打印它们的行
awk '/Failed/ {print $0}' auth.log
我相信这就是你要找的东西。
答案 3 :(得分:0)
而不是打印$6
,只打印$6
匹配"失败"
你有
cat auth.log | sed -e 's/,//g' | awk -F" " '{print $6}'
您可以使用
sed -e 's/,//g' auth.log | awk '$6=="Failed"'
(正如其他人所指出的那样,sed
可以将文件名作为参数,默认情况下awk
会在空白处打破,因此无需指定{{1}参数。)
(您的示例输入没有逗号,因此您甚至可能不需要-F
命令。)