【问题标题】:Unix Shell Sed Pattern March with Space带空格的 Unix Shell Sed 模式行进
【发布时间】:2017-07-07 06:14:41
【问题描述】:

我想grepDA”后面的数据:

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'

这些都是错误的。 谁能指导我修复错误并告诉我如何学习正则表达式的模式匹配?谢谢。

【问题讨论】:

  • 这是文件中的字符串还是文本行?

标签: regex bash shell sed


【解决方案1】:

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 调用。 ([^ ]+) 表示捕获任何内容,直到看到空格字符。

【讨论】:

  • 但是DA:XXXXX字符串后面有一个空格,为什么我不能设置一个模式来匹配它?
  • 对不起,我知道你的意思:“DA:d8:49:2f:74:dc:cf (oui Unknown)”,f 和 ( 之间有一个空格,为什么提取不会是成功了吗?
  • 你还需要(oui Unknown)输出吗?
  • @GaigerChen 那么它会为您提供正确的输出还是您期望其他的东西?
  • 我不知道为什么模式匹配会失败 "DA:d8:49:2f:74:dc:cf (" case..
猜你喜欢
  • 2013-07-31
  • 1970-01-01
  • 2015-01-19
  • 1970-01-01
  • 2016-07-15
  • 1970-01-01
  • 2013-05-23
  • 2013-08-28
  • 2016-10-07
相关资源
最近更新 更多