2012-02-29 46 views
2

我有需要剪切的日志文件,每行输出DD-MM-YYYY HH:MM:SS。理想情况下,我想这样的文件的最后10分钟。如何在sed中包含perl命令?

我有一个Perl命令来获取时间的10分钟前:

perl -e 'use POSIX qw(strftime); print strftime "%e-%m-%Y %H:%M:%S",\ localtime(time()- 600);' 

输出示例:29-02-2012 16点38分14秒

和SED命令切断该文件。这适用于手动日期和系统时间现在作为第二个变量。我无法使用日期的更高级功能,因为我正在使用Solaris 8以及c shell。

sed '1,/29-02-2012 16:07/d;/=$(date +%d-%m-%y %H:%M:%S")/,$d' debug.log | tee cut-log | less 

赞赏任何帮助...

+0

你有没有gnu sed? – Kent 2012-02-29 16:55:24

+0

您可以使用TZ var操作Solaris 8日期(目前无法访问那些东西),在comp.unix.shell中进行谷歌组搜索会带来这种情况。看看你的系统是否安装了GNU工具,通常在/ usr/local/bin中,这会让事情变得更简单。另外,虽然不是一个好的shell,但是你在做什么,在csh中不应该是可能的。所有这一切说,我认为下面的kev是正确的。祝你好运。 – shellter 2012-02-29 17:24:09

回答

1

$(date)不单引号字符扩大。更改为双引号。

sed "1,/29-02-2012 16:07/d;/=$(date +'%d-%m-%y %H:%M:%S')/,\$d" 
2

只需在perl中完成整个事情,使用..运算符。类似于

perl -MPOSIX -n -e 'print if /@{[ strftime "%e-%m-%Y %H:%M:%S",\ localtime(time()- 600) ]}/ .. /@{[ strftime "%e-%m-%Y %H:%M:%S",\ localtime(time()) ]}/ ' 

编辑:粘贴错误的代码。我修复了它。

+0

原谅我,因为我是新的,但我得到这个错误: > perl -MPOSIX -n -e'print if/$ {[strftime“%e-%m-%Y%H:%M:%S” ,\ localtime(time() - 600)]}/../$ {[strftime“%e-%m-%Y%H:%M:%S”,\ localtime(time()]} /' 在-e行1,在“near”附近的语法错误)]“ 执行-e因编译错误而中止。 我是否将此信息传递给sed后? – dueyfinster 2012-03-01 10:05:29

+0

应该修复。 – 2012-03-01 19:29:06