2012-11-01 115 views
0

使用此命令,我想要一個命令僅獲取當前的mac地址,另一個命令只獲取永久ma​​c。所以我必須使用grep表達式,但我不知道該怎麼做。返回結果的一部分(GREP)

$ macchanger -s wlan0 
    Permanent MAC: 14:25:47:ff:c4:aa (Twinhan) 
    Current MAC: 00:24:54:f0:5c:cc (unknown) 

所以我真的想要做一些像macchanger -s wlan0 | grep的......爲了準確得到14:25:47:FF:C4:AA 而另一命令來獲得00:24:54:F0:5C:CC 感謝您

回答

2

要獲得 '永久性' 行:

macchanger -s wlan0 | awk '/Permanent/ { print $3 }' 

要獲得 '當前' 行:

macchanger -s wlan0 | awk '/Current/ { print $3 }' 
+0

謝謝,這是處理問題的最佳方法x)我不知道awk,它看起來非常有用。 – sidney

1

我想你會更好關閉使用sedgrep

macchanger -s wlan0 | sed -n '/^Permanent/s/Permanent MAC: \([0-9a-fA-F:]*\) .*/\1/p' 
macchanger -s wlan0 | sed -n '/^Current/s/Current MAC: \([0-9a-fA-F:]*\) .*/\1/p' 

這與工作POSIX兼容sed; GNU sed有時會有自己的想法,但它接受這些並按預期工作。

+0

沒有理由匹配''//''表達式之外的'Permanent'。如果你想確保它被錨定,只需在表達式模式匹配的開頭添加'^'。 –

0

-o選項grep會做你想要什麼。例如:

grep -o '[0-9a-f:]\{17\}' 
+0

每次都會選取兩個地址。 –

+0

是的。我最初的問題並不清楚這是否是需要的。編輯:雖然如果我仔細閱讀它,我想這很清楚。 :-) –

1

如果你想的grep:

macchanger -s wlan0 | grep Permanent | grep -P -o '..:..:..:..:..:..' 
macchanger -s wlan0 | grep Current | grep -P -o '..:..:..:..:..:..' 
1

grep爲每個地址:

grep -P -o '(?<=Permanent MAC:)[a-zA-Z0-9:]+' 
grep -P -o '(?<=Current MAC:)[a-zA-Z0-9:]+' 
0

這個解決方案取決於在輸出結果的順序:

declare -a results 
results=($(macchangher -s wlan0 | egrep -oi '([a-f0-9]{2}:){5}[a-f0-9]{2}')) 
perm=$results[0] 
cur=$results[1]