【问题标题】:How can I include a perl command in sed?如何在 sed 中包含 perl 命令?
【发布时间】:2012-02-29 16:52:43
【问题描述】:

我有需要剪切的日志文件,每行输出 DD-MM-YYYY HH:MM:SS。理想情况下,我想要此类文件的最后 10 分钟。

我有一个 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,所以我无法使用 date 的更高级功能。

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

任何帮助表示赞赏...

【问题讨论】:

  • 您可以使用 TZ var 操作 Solaris 8 日期(目前无权访问这些内容),在 comp.unix.shell 中的 google 群组搜索将显示该内容。查看您的系统是否安装了 GNU 工具,通常在 /usr/local/bin 中,这会使事情变得更容易。此外,虽然不是一个很好的外壳,但在 csh 中没有什么是不可能的。综上所述,我认为下面的 kev 是在正确的轨道上。祝你好运。

标签: perl bash shell sed tcsh


【解决方案1】:

只需在 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()) ]}/ '

编辑:代码粘贴错误。我已经修好了。

【讨论】:

  • 原谅我,因为我是新手,但我收到了这个错误:>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 行,靠近 ") ]" 的语法错误 由于编译错误,-e 的执行中止。之后我会将其传递给 sed 吗?
【解决方案2】:

$(date) 不会在单引号字符串中展开。改为双引号。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-24
    • 2018-08-17
    • 2014-12-16
    • 1970-01-01
    • 2018-03-25
    • 2017-03-15
    • 2018-01-08
    • 1970-01-01
    相关资源
    最近更新 更多