Text-Processing

如何匹配共享相同單詞的所有行

  • May 23, 2022

我在 Visual Studio Code 中使用集成搜尋功能。在搜尋條件中有搜尋事物的正則表達式方式。

我正在嘗試搜尋完整的 CSV(使用 Visual Studio Code IDE)、包含單詞“Mamba”的行的第一個欄位的完全匹配以及具有相同 MAC 地址的行(xx:xx:xx:xx:xx:xx ) 如果該行包含“Mamba”?

我有需要使用 regEx 解析的 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 地址的其他行之前。

我的理解是

  • Mamba保持一致,記住 mac
  • 與那些 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

第一行不會被抓住

引用自:https://unix.stackexchange.com/questions/703270