用sed和变量剪切日志文件

时间:2016-05-18 23:04:19

标签: linux bash variables sed

我有日期和事件的日志文件。我想不时检查这个文件,只查看特定时间点的记录,例如上次检查时的最后一次错误。

05/03/2016 23:55:25.142639 user1
05/04/2016 12:55:25.142639 user4
05/04/2016 13:57:25.142639 user3
05/04/2016 13:51:02.236522 user2

我希望将日期保存在变量

variable="05/04/2016 12:55:25.142639"

我尝试运行以下命令,但没有成功:

[sdtest tmp]$ sed -n "/$variable/,\$p" logfile.out
sed: -e expression #1, char 5: unknown command: `0'

1 个答案:

答案 0 :(得分:5)

这是因为你的命令扩展到了

sed -n /05/04/2016 12:55:25.142639/,$p logfile.out

你看到了问题吗?太多的正斜杠会混淆sed,它会尝试在地址0执行命令/05/

要解决此问题,您必须使用不同的地址分隔符。与s///不同,您可以在s|||中使用不同的分隔符,对于地址,您必须转义第一个分隔符,例如:

$ sed -n "\|$variable|,\$p" logfile.out
05/04/2016 12:55:25.142639 user4
05/04/2016 13:57:25.142639 user3
05/04/2016 13:51:02.236522 user2

来自manual

的引用
  

\%regexp%

     

%可以替换为任何其他单个字符。)

     

这也匹配正则表达式 regexp ,但允许一个   使用与/不同的分隔符。如果是这个特别有用    regexp 本身包含很多斜杠,因为它避免了每个/的繁琐转义。如果 regexp 本身包含任何分隔符   每个字符都必须用反斜杠(\)进行转义。

备注:为避免使用双引号导致的转义问题,我们也可能只在shell变量周围加上双引号,其余部分使用单引号:

sed -n '\|'"$variable"'|,$p' logfile.out