我需要从包含日期时间戳的文件中提取信息,如下所示
[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)
一般来说,不要尝试使用正则表达式来匹配数字,而是进行数字比较,例如使用任何 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)
| 归档时间: |
|
| 查看次数: |
288 次 |
| 最近记录: |