如何正确循环这个BASH语句?

时间:2013-02-13 05:33:18

标签: linux bash

我在这行代码中使用的最佳循环是什么,它通过一个日志文件找到$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}'

4 个答案:

答案 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命令。)