2014-02-27 77 views
0

我在bash shell中運行以下命令,試圖僅返回[]中的十六進制字符和緊隨其後的整數值。第一次sed電話將取代所有內容,包括[。第二個替換:]。該命令會產生所需的結果,但我希望在單個sed語句中完成此操作,即不必再次通過sed。我試過很多這兩個正則表達式的組合,但一直沒能找到能夠產生所需結果的組合。使用sed從輸出中刪除不需要的字符

echo 'dot1dTpFdbPort[00:02:6f:d9:16:ca] 12' | sed 's/^.*\[//g' | sed 's/[][\:]//g' 
00026fd916ca 12 

回答

4

也許你可以嘗試使用兩個正則表達式有一個獨特的sed命令:

echo 'dot1dTpFdbPort[00:02:6f:d9:16:ca] 12' | sed -e 's/^.*\[//g' -e 's/[][\:]//g' 

該命令會產生你想要的結果正是你想要的:只在一個SED stetment。

Saludos。

+0

這個工作非常非常感謝你。 – user3320741

+1

可以縮短爲:'sed -e's /^.*\[// g; s/[] [\:] // g'' – Jotne

0

有些這樣的?

echo 'dot1dTpFdbPort[00:02:6f:d9:16:ca] 12' | awk '{gsub(/[^[]*\[|]|:/,"")}8' 
00026fd916ca 12 
1
echo 'dot1dTpFdbPort[00:02:6f:d9:16:ca] 12' | sed 's/^.*\[//;s/[][\:]//g' 
+1

g不需要首先行動 – NeronLeVelu

0
echo 'dot1dTpFdbPort[00:02:6f:d9:16:ca] 12' | sed 's/://g;s/.*\[\(.*\)\]/\1/' 

相似,但基於內容提取