1

我想使用 bash 脚本从 linux 中的文本文件中提取任何包含MAC 地址的行,然后如果可能的话将其保存到另一个文件中?

有使用 sed 和 grep 删除行的不同示例,但到目前为止我还不能让它们为我工作。一般来说,我对编程不是很好,所以它可能比我认为的要容易得多。

下面是我从中提取的文本文件示例。

猫测试.txt

spawn ssh -l user x.x.x.x -p 22 "arp"
DD-WRT Mega
Release xx/xx/xx (SVN revison:xx)
root@x.x.x.x password:
Device1 (x.x.x.x) at xx:xx:xx:xx:xx:xx [ether] on br0
Device2 (x.x.x.x) at xx:xx:xx:xx:xx:xx [ether] on br0
Device3 (x.x.x.x) at xx:xx:xx:xx:xx:xx [ether] on br0

以下是我正在寻找的结果。

结果.txt

Device1 (x.x.x.x) at xx:xx:xx:xx:xx:xx [ether] on br0
Device2 (x.x.x.x) at xx:xx:xx:xx:xx:xx [ether] on br0
Device3 (x.x.x.x) at xx:xx:xx:xx:xx:xx [ether] on br0

如果有人知道如何从一个文件中提取包含 MAC 地址的行并通过 bash 脚本将它们发送到另一个文本文件,那将是一个很大的帮助。

谢谢

4

5 回答 5

3

这可能是最简单的使用grep

grep -E '(..:){5}..' < infile.txt > outfile.txt

值得注意的是,这在强制匹配方面有点放松,而不是严格只匹配有效的 mac 地址,但这个表达式也更简单一些,很可能就足够了。

于 2013-04-03T16:43:31.480 回答
1

尝试:

grep -E "(..:){5}.." file
于 2013-04-03T16:44:38.280 回答
1

试试这个:

grep '([0-9A-F]{2}[:-]){5}([0-9A-F]{2})' < in.txt > out.txt
于 2013-04-03T16:45:17.800 回答
1

尝试这样做,这是最可靠,最强大的解决方案 =)

grep -E '\b([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}\b' < file > newfile
于 2013-04-03T16:55:18.550 回答
0

对于初学者来说,你可以使用 grep,然后你可以转到 sed,然后你可以学习 awk。看到这是您的第一个问题,发布它肯定比谷歌问题花费更多的精力:)

于 2013-04-03T16:51:17.863 回答