grep 带变量

grep 带变量

我正在尝试创建一个脚本来监视使用 sudo 的所有登录,包括成功和失败。

现在,我有:

set tdate = $(date "+%b %d")
set attempted_su_log = /var/log/suattempts

cat /var/log/secure | grep $tdate | grep 'servername su' >> $attempted_su_log

如何从 /var/log/secure 中 grep 当前日期,以便我只获取它们发生之日的条目?

当我跑步时

cat /var/log/secure | grep 'Mar 18' | grep 'servername su'

从命令行,我得到了我需要的结果,但我不确定如何使用当前日期将脚本编写为 grep ,设置为 $tdate 变量。

答案1

您必须引用 grep: 的参数grep "$tdate"。这是因为$tdate扩展为两个空格分隔的单词,这两个单词又作为两个参数传递给 grep,除非添加双引号。

您的脚本可以改进以删除 cat 的无用使用,并且仅调用 grep 一次:

</var/log/secure grep "$tdate.*servername su" >>"$attempted_su_log"

答案2

tdate那里有一个空间。因此,grep 将 的第二部分视为tdate文件名。您需要$tdate用双引号括起来以防止这种情况发生。您的命令应如下所示:

cat /var/log/secure | grep "$tdate" | grep 'servername su' >> $attempted_su_log

相关内容