2012-04-25 13 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 

任意のアイデア?私はちょうどmacs.txtと呼ばれるファイルにMACアドレス部分だけを抽出したいと思う。

答えて

6

てみてください。sedを使用して

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

私は近くにいることを知っていた! hahaありがとう、私は括弧をエスケープしなければならなかったことを気づかなかった。 –

+0

O'Reillyの本がある(一言で言えば、Unix)私はいつもユーティリティ間のパターンマッチングのバリエーションを参照していた。この特定のバリエーションは私の心の中で新鮮でした – MattH

+2

'[:xdigit:]' [文字クラス](http://www.freebsd.org/cgi/man.cgi?grep#REGULAR_EXPRESSIONS) @ greennjackman:良いヒント、16進文字クラスが存在しないことを知りました –

1

一つの方法:

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

結果:

00aa11bb22cc 
aa11bb22cc33 
+0

に拡張するとよいでしょう。これは素晴らしいことです。これがgrepよりも速いのであれば、どんな考えですか?私のログファイルはかなり大きいです... –

+0

@Alex_Hyzer_Kenoyer:私はそうは思わない。私が知っている限り、 'sed'はかなり速いですが、' grep'は通常大きな賭けです。 – Birei

+0

クール、情報ありがとう! –

0

のegrepは動作します:

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

2つの正規表現を処理するためのgrepのオプション、

grep -e 

grep -E 

そのうちの一つはegrepのと等しく、私は今、あなたはどの知っていると思いますがあります。 :)