【发布时间】:2018-08-02 10:31:07
【问题描述】:
以下来自 Perl 脚本..
$search2= join(' ', $mo,$day,$hr); # Output "Aug 2 03"
$LOG1 = "/tmp/log" # Log file path. It has $search2 inside it
$search1 = "issue|error"
这是我遇到问题的地方...
$failed = `"/bin/egrep" "$search1" "$LOG1"| grep "$search2"`;
没有grep "search2" 低于输出
Aug 1 01:03:40 something sudo: pam_unix(sudo:auth): authentication failure; logname=something uid=0 euid=0 tty=/dev/pts/1 ruser= something= user=something
Aug 1 03:34:20 something sudo: pam_unix(sudo:auth): authentication failure; logname=something uid=0 euid=0 tty=/dev/pts/0 ruser= something= user=something
Aug 2 00:43:29 something sudo: pam_unix(sudo:auth): authentication failure; logname=something uid=0 euid=0 tty=/dev/pts/1 ruser= something= user=something
Aug 2 03:02:33 someting sudo: pam_unix(sudo:auth): authentication failure; logname=something uid=0 euid=0 tty=/dev/pts/1 ruser= something= user=something
但是当使用| grep "$search2" 时没有得到任何东西
print "$failed"; # It is not throwing any output of 'Aug 2 03'
但是,当我在 Linux 命令行上执行相同的操作时,我得到了所需的输出。下面我在linux命令行上使用
/bin/egrep "issue|error" "/tmp/log" | grep "Aug 2 03"
请帮忙解决。
【问题讨论】:
-
当 Perl 擅长此类任务时,为什么还要使用 grep?您确定您从 Perl 运行的命令与您在命令行上运行的命令相同吗?
-
是的,我在 linux shell 中运行相同的命令,一个区别是我没有使用 ` ` 并且没有保存在变量中...
-
我对 perl 很陌生,所以真的需要帮助...修复
$failed ="/bin/egrep" "$search1" "$LOG1"| grep "$search2";这样我就可以使用 $failed 作为输出通过电子邮件发送。 -
你试过简化吗?向我们展示最简单但不起作用的东西。
-
当您的 grep 模式仅包含一个空格时,
Aug和数据中紧随其后的数字之间似乎有几个空格(或制表符?)。会不会是这个问题?