我尝试使用正则表达式从以下行中捕获一些数据:
[*] 0.0.0.0:80 Cannot reliably check exploitability.
[-] {peer} - Check failed: The following options failed to validate: USERNAME, PASSWORD.
[*] 0.0.0.0:80 The target is not exploitable.
我正在使用的正则表达式是:
^\[.\].*\s([A-Z]{1}.*$)
问题是它导致(对于捕获组):
Cannot reliably check exploitability.
PASSWORD.
The target is not exploitable.
我想要捕获的是所有文本,它适用于那些包含ip的文本,但另一个文件有点失败,我需要的是中间版本:
Check failed: The following options failed to validate: USERNAME, PASSWORD.
我不确定为什么它不能正确捕捉中间人。
如果这很重要,那就是gawk。
答案 0 :(得分:1)
由于贪婪的.*
模式使正则表达式与空白后的最后一个大写字母匹配,第二个工作不正常。
您可以使用[^A-Z]*
代替.*
:
^\[.\][^A-Z]*\s([A-Z].*)$
^^^^^^^
<强>详情
^
- 行的开头\[
- [
.
- 任何字符\]
- ]
[^A-Z]*
- 除ASCII大写字母以外的任何0 +字符\s
- 空白([A-Z].*)
- 第1组:大写的ASCII字母和行的其余部分$
- 行尾