AIX grep 正则表达式

use*_*344 -1 bash aix grep

我需要从包含日期时间戳的文件中提取信息,如下所示

[01/Sep/2023:08:10:45 +0200]

我想在 AIX 上使用 grep 匹配 2023 年的所有行

我尝试过grep -E "\[.*(\/2023)*\]"但没有成功。

好吧 - 我不太清楚它看起来像..这是实际文件中的示例数据

10.239.45.25 - - [01/Sep/2022:08:10:45 +0200] "GET /favicon.ico HTTP/1.1" 403 279
10.218.72.116 - - [01/Sep/2022:08:10:45 +0200] "GET /favicon.ico HTTP/1.1" 403 279
10.66.244.120 - - [01/Sep/2022:08:10:45 +0200] "GET /favicon.ico HTTP/1.1" 403 279
10.239.45.25 - - [01/Sep/2022:08:10:45 +0200] "GET /favicon.ico HTTP/1.1" 403 279
10.218.72.116 - - [01/Sep/2023:08:10:45 +0200] "GET /favicon.ico HTTP/1.1" 403 279
10.66.244.120 - - [01/Sep/2023:08:10:45 +0200] "GET /favicon.ico HTTP/1.1" 403 279
Run Code Online (Sandbox Code Playgroud)

我预计输出只是最后两行,因为它们是在 2023 年,无论下面的其他内容如何

10.218.72.116 - - [01/Sep/2023:08:10:45 +0200] "GET /favicon.ico HTTP/1.1" 403 279
10.66.244.120 - - [01/Sep/2023:08:10:45 +0200] "GET /favicon.ico HTTP/1.1" 403 279
Run Code Online (Sandbox Code Playgroud)

Ed *_*ton 5

一般来说,不要尝试使用正则表达式来匹配数字,而是进行数字比较,例如使用任何 awk:

$ awk -F'[/:]' '$3 == 2023' file
10.218.72.116 - - [01/Sep/2023:08:10:45 +0200] "GET /favicon.ico HTTP/1.1" 403 279
10.66.244.120 - - [01/Sep/2023:08:10:45 +0200] "GET /favicon.ico HTTP/1.1" 403 279
Run Code Online (Sandbox Code Playgroud)

然后您可以通过更改==<或等轻松调整它以打印当年之前或之后的行>,例如:

$ awk -F'[/:]' '$3 < 2023' file
10.239.45.25 - - [01/Sep/2022:08:10:45 +0200] "GET /favicon.ico HTTP/1.1" 403 279
10.218.72.116 - - [01/Sep/2022:08:10:45 +0200] "GET /favicon.ico HTTP/1.1" 403 279
10.66.244.120 - - [01/Sep/2022:08:10:45 +0200] "GET /favicon.ico HTTP/1.1" 403 279
10.239.45.25 - - [01/Sep/2022:08:10:45 +0200] "GET /favicon.ico HTTP/1.1" 403 279
Run Code Online (Sandbox Code Playgroud)