【发布时间】:2020-11-02 22:32:20
【问题描述】:
我正在尝试读取 openvpn 状态日志以获取已连接的用户。我已经尝试按照答案here,但没有运气。
这是我的文件:
OpenVPN CLIENT LIST
Updated,Mon Jul 13 10:53:46 2020
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
user123,8.9.10.11:24142,143404433,5616022,Mon Jul 13 10:09:31 2020
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
192.168.1.2,user123,8.9.10.11:24142,Mon Jul 13 10:53:45 2020
GLOBAL STATS
Max bcast/mcast queue length,1
END
我想要“Common”和“ROUTING”之间的行,例如:
user123,8.9.10.11:24142,143455713,5682214,Mon Jul 13 10:09:31 2020
使用这个:
awk '/Common/{flag=1;next}/ROUTING/{flag=0}flag' /pathtomylog/openvpn-status.log
我明白了:
user123,8.9.10.11:24142,143455713,5682214,Mon Jul 13 10:09:31 2020
192.168.1.2,user123,8.9.10.11:24142,Mon Jul 13 11:00:36 2020
GLOBAL STATS
Max bcast/mcast queue length,1
END
任何帮助表示赞赏。
编辑:以下代码完美运行。问题是Common 的第二个实例。
sudo awk '/ROUTING/{flag=""} /^Common/{flag=1;next} flag' Input file
【问题讨论】:
-
使用 GNU grep:
grep -Poz 'Common Name.*\n\K(.|\n)*(?=ROUTING TABLE)' file或grep -Poz '(?<=Connected Since\n)(.|\n)*(?=ROUTING TABLE)' file -
@Cyrus 感谢这也有效!