因此,当我使用我正在处理的特定日志集时,拉开一个文件cat然后使用它grep来获取匹配的行只会让我走到这一步。它需要一种将行与模式匹配的方法,但仅在匹配后返回行的部分。比赛前后的部分将始终不同。我玩过使用sedor awk,但无法弄清楚如何过滤该行以在比赛前删除部分,或者在比赛后返回部分,两者都可以。这是我需要过滤的行的示例:
2011-11-07T05:37:43-08:00 <0.4> isi-udb5-ash4-1(id1) /boot/kernel.amd64/kernel: [gmp_info.c:1758](pid 40370="kt: gmp-drive-updat")(tid=100872) new group: <15,1773>: { 1:0-25,27-34,37-38, 2:0-33,35-36, 3:0-35, 4:0-9,11-14,16-32,34-38, 5:0-35, 6:0-15,17-36, 7:0-16,18-36, 8:0-14,16-32,34-36, 9:0-10,12-36, 10-11:0-35, 12:0-5,7-30,32-35, 13-19:0-35, 20:0,2-35, down: 8:15, soft_failed: 1:27, 8:15, stalled: 12:6,31, 20:1 }
Run Code Online (Sandbox Code Playgroud)
我需要的部分是“停滞”后的一切。
这背后的背景是我可以找出某些东西停顿的频率:
cat messages | grep stalled | wc -l
Run Code Online (Sandbox Code Playgroud)
我需要做的是找出某个节点停顿了多少次(由“停顿”之后每个冒号之前的部分表示。如果我只是为此(即 20 :)grep,它可能会返回软失败的行,但是没有停顿,这对我没有帮助。我只需要过滤停顿的部分,这样我就可以从那些停顿的节点中搜索特定节点。
出于所有意图和目的,这是一个带有标准 GNU 核心实用程序的 freebsd 系统,但我无法安装任何额外的东西来提供帮助。
我需要为一个主目录中的每个目录和文件创建一个 md5 哈希。唯一让我无法成功的是找出路径中带有空格的文件的方法。
我正在使用 find 进行递归列表(我已经读过 find 是执行此操作的最佳方法):
c5-26-1# find /root/newdir
/root/newdir
/root/newdir/1
/root/newdir/2
/root/newdir/3
/root/newdir/4
/root/newdir/5
/root/newdir/newdir2
/root/newdir/newdir2/1
/root/newdir/newdir2/2
/root/newdir/new
/root/newdir/dir
/root/newdir/new dir
Run Code Online (Sandbox Code Playgroud)
当我用 md5 尝试这个时,我得到了两种不同的结果,但都不起作用:
c5-26-1# md5 $(find /root/newdir) # same outcome using for loop
MD5 (/root/newdir) = bc79a580f6c932937f6fcd454747db72
MD5 (/root/newdir/1) = 94ca98295946310ce88e185ea57486d5
MD5 (/root/newdir/2) = 8432051f64459be5a5e73dc2abd91795
MD5 (/root/newdir/3) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/4) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/5) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/newdir2) = 722165901468b9596dbdddfe118759fb
MD5 (/root/newdir/newdir2/1) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/newdir2/2) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/new) = 89d042c5f9d6ba485a654b543685ea86
MD5 (/root/newdir/dir) = …Run Code Online (Sandbox Code Playgroud) 我需要使用格式化日期命令的结果 (date +"%m/%d") 作为 grep 过滤器来过滤另一个命令的结果,该命令将在系统上显示警报,以便我只能看到来自给定日期的警报.
假设 alertcommand 在控制台中给出警报读数。我知道我可以alertcommand | grep 8/10从今天开始获取日志,但我希望能够提供给date +"%m/%d"它,这样我就不必每次运行它时都指定日期,但我不知道如何链接它合并为一个命令(最好无需创建临时文件或任何内容,因为这将在客户硬件上运行)。
我看了这个类似的问题,但不知道如何让它以同样的方式工作。