将变量中的匹配模式传递给grep命令

4

你好,我需要帮助了解如何将变量2015-12-16 08:16:传递给grep命令。

bash-3.2$ Heartbeat=$(date +%Y-%m-%d$'\t'%H:%M:)                            
bash-3.2$ echo $Heartbeat
2015-12-16 08:16:

bash-3.2$ grep $Heartbeat file.txt 不正确,但是 grep '2015-12-16 08:16:' file.txt 正确。

请帮我解决如何使用变量实现此功能。

1个回答

4
grep -- "$Heartbeat" file

单引号可防止变量扩展,双引号允许变量扩展并将空格分隔的值保持在一个参数中。

在您的情况下,我们还需要添加--(参数结束符),因为您的$Heartbeat值包含-字符,这可能被解释为grep选项。

IHTH


不行。Heartbeat=$(date +%Y-%m-%d$'\t'%H:%M:);grep "$Heartbeat" LOOPEUR2015-12-16.log;echo $Heartbeat;2015-12-16 08:41:;grep '2015-12-16 08:41:' LOOPEUR2015-12-16.log;2015-12-16 08:41:01,967 INFO in.FD_LOOPE_SSGA - <2220 心跳没有输出,但是当我们传递'2015-12-16 08:41:'时,我们确实得到了输出。 - user4786572
请检查我的更新答案。同时,请在说“它不起作用”时更具体一些。是没有输出,还是有错误信息? - shellter
感谢提供详细信息。我现在正在阅读它们。 - shellter
1
如果“-”是第一个字符,则只有--是必要的。$Heartbeat。 - chepner
1
@user4786572,我认为chepner是正确的。 我最后加了 --。 我不知道为什么 grep "$var" file 不返回任何输出,而 grep '2015-..' file 会返回。 我希望有人能帮助你。(它应该可以工作)。 祝好运。 - shellter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接