我正在使用 Visual Studio Code 中的集成搜索功能。在搜索条件中,有正则表达式的搜索方式。
我正在尝试搜索完整的 CSV(使用 Visual Studio Code IDE),包含单词“Mamba”的行的第一个字段与相同 MAC 地址的行(xx:xx:xx:xx:xx:xx )如果该行包含“Mamba”?
我有 CSV,需要使用正则表达式进行解析。
Mamba,1C:28:AF:8E:73:24,-69,6,11:21:27
Mamba,1C:28:AF:8E:73:24,-68,6,11:21:29
Mamba,1C:28:AF:8E:75:20,-69,6,11:21:27
Mamba,1C:28:AF:8E:75:20,-68,6,11:21:29
,1C:28:AF:8E:73:31,-73,52,11:21:12
,1C:28:AF:8E:75:32,-75,52,11:21:14
,1C:28:AF:8E:73:24,-77,52,11:21:17
,1C:28:AF:8E:73:24,-73,52,11:21:12
,1C:28:AF:8E:75:32,-75,52,11:21:14
,1C:28:AF:8E:75:20,-77,52,11:21:17
eduroam,8C:7A:15:55:58:18,-88,6,11:21:12
eduroam,8C:7A:15:55:58:18,-88,6,11:21:14
eduroam,8C:7A:15:55:58:18,-88,6,11:21:17
应用正则表达式后,我应该选择以下结果:
Mamba,1C:28:AF:8E:73:24,-69,6,11:21:27
Mamba,1C:28:AF:8E:73:24,-68,6,11:21:29
Mamba,1C:28:AF:8E:75:20,-69,6,11:21:27
Mamba,1C:28:AF:8E:75:20,-68,6,11:21:29
,1C:28:AF:8E:73:24,-77,52,11:21:17
,1C:28:AF:8E:73:24,-73,52,11:21:12
,1C:28:AF:8E:75:20,-77,52,11:21:17
注意:包含搜索字符串/模式“Mamba”的行不会位于具有相同 MAC 地址的其他行之前。
答案1
我的理解是
- 全部符合曼巴,记住麦克
- 与那些 mac 保持一致
我带着这个 awk 来了
awk -F, '$1=="Mamba" { m[$2]=NR ; } $2 in m { print ;}'
在哪里
-F,
用作,
分隔符$1=="Mamba" { m[$2]=NR ; }
记住数组中m
曼巴的mac$2 in m { print ;}
如果匹配,则打印
正如建议的较短形式
awk -F, '$1=="Mamba"{ m[$2] } $2 in m'
- 无需设置
m[$2]
- 隐
{print}
式条件$2 in m
请注意,如果 mac 出现在与 Mamba 匹配之前,则不会匹配
如果数据是
,1C:28:AF:8E:73:24,-77,52,11:21:17
Mamba,1C:28:AF:8E:73:24,-69,6,11:21:27
第一行不会被捕获
答案2
使用GNU sed
##> regex for Mac address
h2='[[:xdigit:]]{2}'
mac_addr="$h2(:$h2){5}"
sed -En "
/^(Mamba|),$mac_addr,/G
/^[^,]*,($mac_addr),.*\n\1\n/ba
/^Mamba,.*\n/!d
h
s/^Mamba,($mac_addr),.*/\1/M
x
:a
P
" file
输出:-
Mamba,1C:28:AF:8E:73:24,-69,6,11:21:27
Mamba,1C:28:AF:8E:73:24,-68,6,11:21:29
Mamba,1C:28:AF:8E:75:20,-69,6,11:21:27
Mamba,1C:28:AF:8E:75:20,-68,6,11:21:29
,1C:28:AF:8E:73:24,-77,52,11:21:17
,1C:28:AF:8E:73:24,-73,52,11:21:12
,1C:28:AF:8E:75:20,-77,52,11:21:17
- 附加保留空间,用于存储仅在 Mamba 行中看到的 Mac 地址。
- 当当前行的 Mac 地址(第二个字段)与保留空间中的某处匹配时,打印当前行
- 仅针对 Mamba 系列,我们提取 Mac 地址。