我正在尝试学习如何使用 Linux 命令和工具解析文件。我总是对如何最好地利用 grep/awk/sed 感到困惑。
这是一个具体的用例。
我有一个包含以下字符串的日志文件:
Config Server received a Connection Establishment with an invalid public key, closing connection. Agent Identifier: SRV3 Socket IP: 192.168.2.6
Config Server received a Connection Establishment with an invalid public key, closing connection. Agent Identifier: TESTSRV4 Socket IP: 10.1.2.3
Config Server received a Connection Establishment with an invalid public key, closing connection. Agent Identifier: SRV1 Socket IP: 192.168.2.15
Config Server received a Connection Establishment with an invalid public key, closing connection. Agent Identifier: TESTSRV2 Socket IP: 10.1.2.4
我的目标是提取出现在“代理标识符”之后的主机名以及每行关联的 IP 地址,并将它们导出到 txt 文件。最好的解决办法是什么?
答案1
只需这样做:
$ cat file.log | awk '{ print $16, $19 }'
它会返回一个像这样的列表:
SRV3 192.168.2.6
TESTSRV4 10.1.2.3
SRV1 192.168.2.15
TESTSRV2 10.1.2.4
您可以将输出重定向到任何您喜欢的位置,例如,只需添加:
> hosts.text
将数据输出到名为的文件主机.txt
上述内容将破坏(替换)中的任何内容主机.txt文件。如果您想将数据附加到文件末尾,请>>
使用>
.
答案2
sed方法:
sed -n 's/.* Agent Identifier: \(.*\) Socket IP: \(.*\)/\1 \2/p' inputfile > host_list.txt
主机列表.txt文件内容( cat host_list.txt
):
SRV3 192.168.2.6
TESTSRV4 10.1.2.3
SRV1 192.168.2.15
TESTSRV2 10.1.2.4