【发布时间】:2014-08-01 15:04:05
【问题描述】:
我有一个格式如下的日志文件:
<134> 1 2014 Jul 31 18:48:03 - - MYAPP - [blablabla aNumber 10.70.4.126 bablabla - anotherIP 56389 anotherPortNumber - anotherIP anotherPortNumber ]
方括号中的模式可以在一行中重复 2 次或更多次,因此我的日志文件可能如下所示:
2014 Jul 31 18:48:03 - - MYAPP - [blablabla aNumber 10.70.4.126 bablabla - anotherIP 56389 anotherPortNumber - anotherIP anotherPortNumber ]
2014 Jul 31 18:48:03 - - MYAPP - [blablabla aNumber 10.70.4.126 bablabla - anotherIP 56389 anotherPortNumber - anotherIP anotherPortNumber ][blablabla aNumber 10.70.4.127 bablabla - anotherIP 56390 anotherPortNumber - anotherIP anotherPortNumber ]
2014 Jul 31 18:48:03 - - MYAPP - [blablabla aNumber 10.70.4.126 bablabla - anotherIP 56389 anotherPortNumber - anotherIP anotherPortNumber ][blablabla aNumber 10.70.4.127 bablabla - anotherIP 56390 anotherPortNumber - anotherIP anotherPortNumber ][blablabla aNumber 10.70.4.128 bablabla - anotherIP 56391 anotherPortNumber - anotherIP anotherPortNumber ]
对于行中的每个方括号,我需要使用正则表达式匹配第一个 IP 号和第一个端口号。
我的问题:是否有任何 RegEx 表示可以递归地从重复模式中提取列(在这种情况下,列将是 3 和 7,以空格作为分隔符)?
感谢任何建议
【问题讨论】:
-
你试过什么?这似乎不需要特别复杂的正则表达式知识。此外,在处理正则表达式问题时,拥有准确的数据会非常有帮助,而不是“aNumber”和“anotherIP”。
-
我看不出什么是递归的,你可以简单地做一个重复的模式。
-
也许看看see awk command 是个好主意,特别是如果你只想按列号提取,试试这个
cat logfile | awk '{print $3 $7}'匹配ip 有很多很好的例子网络 -
@Jorge 我的回答对你有帮助吗?
标签: regex