![如何在 sed 命令中调用变量](https://linux22.com/image/124527/%E5%A6%82%E4%BD%95%E5%9C%A8%20sed%20%E5%91%BD%E4%BB%A4%E4%B8%AD%E8%B0%83%E7%94%A8%E5%8F%98%E9%87%8F.png)
我想获取过去 1 小时内的记录数
我的代码如下
nowdate=$(date +'%H:%M:')
pastdate=$(date +'%H:%M:' -d "1 hour ago")
echo $nowdate
echo $pastdate
sed -rne '/"'"$pastdate"'"/,/"'"$nowdate"'"/p' /data/recvdmsg.log | wc -l
我得到的输出是,
12:47:
11:47:
0
此外,这对于像这样的预定义值来说效果很好
sed -rne '/00:00:/,/00:59:/p' /data/recvdmsg.log | wc -l
我想 在 sed 命令中调用我的$nowdate
,变量。$pastdate
答案1
您在声明中引用了太多内容。它应该像这样工作得很好:
sed -rne "/$pastdate/,/$nowdate/p" /data/recvdmsg.log | wc -l
或者如果您仍然想使用单引号,可以这样:
sed -rne '/'$pastdate'/,/'$nowdate'/p' /data/recvdmsg.log | wc -l
请记住,如果/
变量中有字符,它将破坏sed
表达式。
如果您想进一步过滤这些记录,您可以在 Sed 中执行此操作,而不是在末尾添加 grep :
sed -rne "/$pastdate/,/$nowdate/ { /pattern-to-grep-for/p; }" /data/recvdmsg.log
(空格是为了便于阅读;不是强制性的。)
答案2
虽然这是一般性评论而不是具体答案,但我将其作为答案发布,因为它可能有助于 OP 解决扩展中存在问题的根本问题。
当你编写依赖于扩展的论证时,并且你想知道扩展后的论证会是什么样子,那么就echo
知道了。
如果你看一下输出
echo '/"'"$pastdate"'"/,/"'"$nowdate"'"/p'
/"12:36:"/,/"13:36:"/p
然后就可以看到问题出在报价上