如何匹配共享相同单词的所有行

如何匹配共享相同单词的所有行

我正在使用 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 地址。

相关内容