powershell 在日志文件中查找40x错误的正则表达式未返回任何结果

jaql4c8m  于 2022-12-26  发布在  Shell
关注(0)|答案(1)|浏览(89)

我有一个示例日志文件,如下所示

02:49:12 127.0.0.1 GET / 200
02:49:35 127.0.0.1 GET /index.html 200
03:01:06 127.0.0.1 GET /images/sponsered.gif 304
03:52:36 127.0.0.1 GET /search.php 200
04:17:03 127.0.0.1 GET /admin/style.css 200
05:04:54 127.0.0.1 GET /favicon.ico 404
05:38:07 127.0.0.1 GET /js/ads.js 200

我使用下面的模式来匹配40x错误,但它没有返回任何结果。\s是匹配任何空格。

get-childitem -filter *.log -recurse | select-string -pattern "\s40[0-9]\s"

我不明白为什么它不起作用。有人能帮忙澄清一下吗?

pftdvrlh

pftdvrlh1#

末尾没有空格。看起来select-string的行为类似于get-content,阅读每一行而不包括行尾。

get-childitem file.log | select-string -pattern "\s40[0-9]"

file.log:6:05:04:54 127.0.0.1 GET /favicon.ico 404

它可以和get-content -raw一起工作,行尾是一个空格(\r\n),但是它会返回整个文件,Powershell 7会高亮显示匹配项。

get-content -raw file.log | select-string -pattern "\s40[0-9]\s"

02:49:12 127.0.0.1 GET / 200
02:49:35 127.0.0.1 GET /index.html 200
03:01:06 127.0.0.1 GET /images/sponsered.gif 304
03:52:36 127.0.0.1 GET /search.php 200
04:17:03 127.0.0.1 GET /admin/style.css 200
05:04:54 127.0.0.1 GET /favicon.ico 404
05:38:07 127.0.0.1 GET /js/ads.js 200

相关问题