我们的日志模式采用以下格式:dd / Mon / year:time(22 / Feb / 2018:13)。
目标是我们想要在两个不同时间之间找到日志。我们使用sed来获取2次之间的日志。
sed -n '/22\/Feb\/2018:13:/,/22\/Feb\/2018:16/p' /var/log/apache2/domlogs/access.log
以上命令正在手动运行。我们在脚本中创建了两个名为 LAST 和 NOW 的变量,并分配了如下所述的日期变量。
NOW="22/Feb/2018:16"
LAST="22/Feb/2018:13"
我们使用以下sed命令打印相同的输出,但它无法帮助我们打印相同的输出。
sed -n '/'"$LAST"'/'"$NOW"'/p' /var/log/apache2/domlogs/access.log
该命令给出以下错误 sed:-e表达式#1,char 5:未知命令:`F'
如果我们使用普通字符串最后和现在,那么上面的命令工作正常。唯一的问题是变量是否包含输入
中的/答案 0 :(得分:0)
您可以通过在反斜杠前面加上反斜杠来自由更改sed正则表达式的分隔符,例如: \!
。以下命令应该起作用:
sed -n '\!'"$LAST"'!,\!'"$NOW"'!p' /var/log/apache2/domlogs/access.log
如果!
预计会以您的日期时间格式显示,您可以根据自己的判断选择另一种格式。
在使用sed之前,你应该阅读一些好的sed教程,例如:http://www.grymoire.com/Unix/sed.html
我认为您最初希望在sed
中实现范围搜索,而您可能会错过其语法。我把它固定在上面并进行了测试。