regex - Perl 中的 grep 问题
问题描述
以下是来自 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"
请帮助修复它。
解决方案
我认为你应该听从达达在评论中给出的建议。如果您发布的内容真的是您所看到的,则此方法行不通:
你建立你的字符串是这样的:
$search2= join(' ', $mo,$day,$hr);
这意味着您在月和日之间有一个空格。此外,您复制了在不使用搜索字符串的情况下获得的输出,如下所示:
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
这显然不是 8 月和 1 日之间的一个空格。
我很确定如果你/tmp/log
用十六进制编辑器查看你的文件,你不会在“Aug”和“1”之间看到一个空格。
您还可以从命令行调用命令并将其通过管道传输到,例如,xxd
以查看十六进制内容。
推荐阅读
- twilio - 查看器可以在 webrtc 中更改传入视频的质量吗?
- c# - C#中的命名空间点运算符
- css - CSS 子和父选择器
- javascript - 使用 jquery get 方法进行实时验证 - 仅获取 readyState 1
- javascript - 使用 Karma 进行 ngOnInit 和 MediaChange 测试
- php - 无法使用矩阵打印文件夹的图像(.svg)
- python - Python基础树可视化
- mysql - Perl / DBI 查询不保留 JSON 输出的整数值
- python - 为 NumPy 数组中的每个唯一元素选择一个随机索引,并考虑参考数组中缺失的索引
- java - 将快线程归还给池,而不是等待慢线程