我希望{" DA "之后的grep
数据:
BSSID:Broadcast DA:Broadcast SA:da:a1:19:dd:aa:92 (oui Unknown) Probe Request
输出应为
Broadcast
和数据
BSSID:d8:49:2f:74:dc:cf (oui Unknown) DA:d8:49:2f:74:dc:cf (oui Unknown) SA:d8:49:2f:74:dc:cf (oui Unknown) Probe Request
应该是
d8:49:2f:74:dc:cf
我使用命令
echo " -90dB signal [bit 29] BSSID:Broadcast DA:Broadcast SA:f4:9f:f3:d6:68:bc (oui Unknown) Probe Request (PremiumOutletsJP) [1.0 2.0 5.5 11.0 Mbit]" |
sed -rn 's/.*DA:(.*)[:space:]/\1/p'
#it is echo "$DATA"|sed -rn 's/.*DA:(.*)[:space:]/\1/p'
但输出是:
Broadcast SA:f4:9f:f3:d6:68:bc (oui Unknown) Probe Request (PremiumOutletJP) [1.0 2.0 5.5 11.0 Mbit]
或者我尝试命令:
echo "$DATA" | sed -rn 's/ DA:(.*) /\1/p'
那些是错的。 任何人都可以指导我修复错误并告诉我如何学习正则表达式的模式匹配?谢谢。
答案 0 :(得分:0)
grep
解决方案:使用环顾四周。
echo "$DATA"|grep -oP 'DA:\K[^ ]+'
Broadcast
echo "$DATA"|grep -oP 'BSSID:\K[^ ]+'
d8:49:2f:74:dc:cf
使用sed
:
echo "$DATA"| sed -r 's/BSSID:([^ ]+).*/\1/g'
d8:49:2f:74:dc:cf
echo "$DATA"| sed -r 's/.*DA:([^ ]+).*/\1/g'
Broadcast
此处需要的字符串在(
和)
中捕获,之后使用\1
调用。 ([^ ]+)
意味着捕获任何东西直到看到空间角色。