2012-04-25 41 views
2

我需要幫助使用正則表達式從大文件中提取mac地址。Grep Regex for Mac地址

以下是文件的格式:

Wed Apr 25 10:15:32 EDT 2012 Client: 00aa11bb22cc mac 
Wed Apr 25 10:15:34 EDT 2012 Client: aa11bb22cc33 pc 

這裏是我目前沒有運氣嘗試:

grep -io '[0-9a-f]{12}' file.txt > macs.txt 

任何想法?我只想將mac地址部分提取到名爲macs.txt的文件中。

回答

6

嘗試:

grep -io '[0-9a-f]\{12\}' file.txt > macs.txt 
+0

該死的我知道我很近!哈哈非常感謝,我沒有意識到我必須逃避括號... – 2012-04-25 14:45:08

+0

有一本O'Reilly書(簡而言之,Unix)我總是用來指​​代實用程序之間模式匹配的變體。這個特殊的變化在我心中是新鮮的 – MattH 2012-04-25 14:47:17

+2

你也可以使用'[:xdigit:]'[character class](http://www.freebsd.org/cgi/man.cgi?grep#REGULAR_EXPRESSIONS) '需要'-i'選項:'grep -o'[[:xdigit:]] \ {12 \}'' – 2012-04-25 15:01:51

1

一個使用sed方式:

sed -e 's/^.*\([a-fA-F0-9]\{12\}\).*$/\1/' file.txt > macs.txt 

結果:

00aa11bb22cc 
aa11bb22cc33 
+0

謝謝,這個工作也很好。任何想法,如果這比grep更快?我的日誌文件相當大... – 2012-04-25 14:51:38

+0

@Alex_Hyzer_Kenoyer:我不這麼認爲。據我所知'sed'非常快,但'grep'通常是一個很大的賭注。 – Birei 2012-04-25 14:54:51

+0

很酷,感謝您的信息! – 2012-04-25 15:00:33

0

egrep的將工作:

egrep -io '[0-9a-f]{12}' file.txt > macs.txt 

有2個選項grep的處理正則表達式,

grep -e 

grep -E 

其中之一就是等於egrep命令,我想現在你知道哪個。 :)