如何在 sed 命令中调用变量

如何在 sed 命令中调用变量

我想获取过去 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

然后就可以看到问题出在报价上

相关内容