将所有行从文件提取到单独的文件,并使用新行作为分隔符

时间:2014-07-17 13:17:02

标签: shell unix grep

我有一个数据包高速运行的文件。 我想在找到ip后将所有数据包从主文件中提取到另一个文件。

主文件" Main.cap" -

Device:A
Host:B
IP:0.0.0.0
Time:123654

Device:B
Host:C
IP:1.1.1.1
Time:125423


Device:C
Host:D
IP:1.1.1.1
Time:129423


Device:E
Host:F
IP:1.1.1.1
Time:125423


Device:G
Host:H
IP:1.2.5.6
Time:12543

现在从这个文件中我想要从IP 1.1.1.1中提取所有数据包,即所有4个字段和所有3个数据包,然后应该做什么?

总之,我们必须grep这个ip 1.1.1.1,然后找到2个新行,一个在ip之上,一个在ip之后。

1 个答案:

答案 0 :(得分:2)

awk真的很擅长这种事情。只要记录之间有空行,您就可以:

awk '/IP:1\.1\.1\.1/' ORS='\n\n' RS= input-file

RS设置为空字符串会使awk将空行视为记录分隔符,因此您只需匹配IP即可打印整个记录。 (使用\.匹配文字.)分配ORS并不是绝对必要的,但它会使输出更漂亮。