如何在linux中使用bash从文本文件中提取行?

时间:2013-04-03 16:39:04

标签: linux bash grep

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

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

我正在从中提取的文本文件示例。

cat Test.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

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

的Result.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脚本将它们发送到另一个文本文件,这将是一个很好的帮助。

感谢您

5 个答案:

答案 0 :(得分:3)

使用grep

可能最简单
grep -E '(..:){5}..' < infile.txt > outfile.txt

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

答案 1 :(得分:1)

尝试:

grep -E "(..:){5}.." file

答案 2 :(得分:1)

试试这个:

grep '([0-9A-F]{2}[:-]){5}([0-9A-F]{2})' < in.txt > out.txt

答案 3 :(得分:1)

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

grep -E '\b([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}\b' < file > newfile

答案 4 :(得分:0)

对于初学者你可以使用grep,然后你可以进入sed,然后你可以学习awk。看到这是你的第一个问题,发布它确实需要比谷歌更多的努力问题:)