我需要使用格式化日期命令(日期+“%m/%d”)的结果作为grep过滤器来过滤另一个命令的结果,该命令将在系统上显示警报,以便我只看到给定日期的警报。
假设alertcommand 在控制台中给出警报读数。我知道我可以alertcommand | grep 8/10
获取今天的日志,但我希望能够输入date +"%m/%d"
该日志,这样我就不必每次运行它时都指定日期,但我不知道如何链接它到一个命令中(最好不需要创建临时文件或任何东西,因为这将在客户硬件上运行)。
我在看这个问题是类似的,但无法弄清楚如何使其以同样的方式工作。
答案1
在 bash 中,只需使用类似的东西alertcommand | grep $(date +"%m/%d")
$()
在子 shell 中执行命令并将命令的输出作为字符串返回。或者,您可以用反引号将命令括起来,以达到相同的效果。
答案2
您可以简单地将 date 命令的输出分配给另一个变量,并将其用作参数:
myDateVariable=`date +"%m/%d"`
alertcommand | grep $myDateVariable
这样,您可以在将来重新使用日期值并调试任何中间步骤
答案3
在 FreeBSD 的 shell csh 中我不能使用你的两种方法。
1)
cat /var/log/exim/mainlog | grep $(date +%Y-%m-%d)
Illegal variable name.
2)
d=`date +%Y-%m-%d`;cat /var/log/exim/mainlog|grep $d
d=2011-11-13: Command not found.
但我可以直接使用反引号代码,如下所示:
cat /var/log/exim/mainlog | grep `date +%Y-%m-%d`