我有一个日志文件,我想使用C程序在下面的文件中打印以太网地址。那我该怎么办呢?我的日志文件如下:
*Thu Dec 25 11:40:41 2014; ******** LAN traffic monitor started ********** LAN traffic log, generated Thu Dec 25 11:41:41 2014
Ethernet address: 08:00:27:d7:54:fa
Incoming total 389 packets, 184398 bytes; 388 IP packets
Outgoing total 383 packets, 64444 bytes; 382 IP packets
Average rates: 24.58 kbps incoming, 8.59 kbps outgoing
Last 5-second rates: 0.86 kbps incoming, 0.45 kbps outgoing
Ethernet address: 52:54:00:12:35:02
Incoming total 383 packets, 64444 bytes; 382 IP packets
Outgoing total 389 packets, 184398 bytes; 388 IP packets
Average rates: 8.59 kbps incoming, 24.58 kbps outgoing
Last 5-second rates: 0.45 kbps incoming, 0.86 kbps outgoing
Running time: 60 seconds
*** LAN traffic log, generated Thu Dec 25 11:42:41 2014
iEthernet address: 08:00:27:d7:54:fa
Incoming total 395 packets, 184935 bytes; 393 IP packets
Outgoing total 389 packets, 64805 bytes; 387 IP packets
Average rates: 12.33 kbps incoming, 4.32 kbps outgoing
Last 5-second rates: 0.00 kbps incoming, 0.00 kbps outgoing
Ethernet address: 52:54:00:12:35:02
Incoming total 389 packets, 64805 bytes; 387 IP packets
Outgoing total 395 packets, 184935 bytes; 393 IP packets
Average rates: 4.32 kbps incoming, 12.33 kbps outgoing
Last 5-second rates: 0.00 kbps incoming, 0.00 kbps outgoing
Running time: 120 seconds
答案 0 :(得分:1)
1)使用fopen()
打开日志文件。
2)逐行阅读fgets()
。
3)使用strstr()
在每一行搜索关键短语“以太网地址”。
4)用printf()
打印这样的行。
5)使用fclose()
关闭文件。
答案 1 :(得分:1)
什么构成了一个'部分'日志文件?
如果您指的是包含'以太网地址'的单行,那么grep
或sed
很容易:
grep 'Ethernet address' logfile
sed -n '/Ethernet address/p' logfile
如果您指的是以太网地址'开头的行块,那么sed
很容易,如果块的大小是grep
则可以使用固定:
sed -n '/Ethernet address/,/^$/p' logfile
grep -A 5 'Ethernet address' logfile
两个命令都包含输出中的空白行。如果不需要,那么:
sed -n '/Ethernet address/,/^$/{ /^$/d; p;}' logfile
grep -A 4 'Ethernet address' logfile
如果你真的想为这份工作编写一个C程序,那肯定是可行的,如果你有一套很好的库来支持你,不是很难。它实际处理文件的代码少于30行(无论你想要块处理的方式),还有80行支持代码用于参数处理等(取决于你支持的选项数量,以及程序的灵活性)应该是一般的),加上库函数。它还取决于你想要的强度以及以太网地址'硬连线进入C程序(提示:你可能不希望它硬连线到程序中)。
请注意,显示的代码会选择&{39; iEthernet address
'数据中显示的行。如果这不是拼写错误并且不想要该块,请在^
之前的每个地方使用插入符号Ethernet
。