变量包含反斜杠在sed bash中不起作用

时间:2018-02-22 18:40:38

标签: bash sed

我们的日志模式采用以下格式: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'

如果我们使用普通字符串最后现在,那么上面的命令工作正常。唯一的问题是变量是否包含输入

中的/

1 个答案:

答案 0 :(得分:0)

您可以通过在反斜杠前面加上反斜杠来自由更改sed正则表达式的分隔符,例如: \!。以下命令应该起作用:

sed -n '\!'"$LAST"'!,\!'"$NOW"'!p' /var/log/apache2/domlogs/access.log

如果!预计会以您的日期时间格式显示,您可以根据自己的判断选择另一种格式。

在使用sed之前,你应该阅读一些好的sed教程,例如:http://www.grymoire.com/Unix/sed.html

我认为您最初希望在sed中实现范围搜索,而您可能会错过其语法。我把它固定在上面并进行了测试。