gpt4 book ai didi

regex - Bash 脚本 : sed/awk/regex to match an IP address and replace

转载 作者:行者123 更新时间:2023-12-02 07:05:22 25 4
gpt4 key购买 nike

我在 bash 脚本中有一个字符串,其中包含一行日志条目,如下所示:

Oct 24 12:37:45 10.224.0.2/10.224.0.2 14671: Oct 24 2012 12:37:44.583 BST: %SEC_LOGIN-4-LOGIN_FAILED: Login failed [user: root] [Source: 10.224.0.58] [localport: 22] [Reason: Login Authentication Failed] at 12:37:44 BST Wed Oct 24 2012

澄清;此处列出的第一个 IP“10.224.0.2”是提交此日志条目的机器,登录尝试失败。有人试图从日志条目中第二个 IP 地址“10.224.0.58”的机器登录,但失败了。

我希望用该机器的主机名替换第一次出现的 IP 地址“10.224.0.2”,正如您目前看到的那样是“IPADDRESS/IPADDRESS”,两次具有相同的信息是没有用的。所以在这里,我想用 grep(或类似的)输出第一个 IP,然后将它传递给类似 host 命令的东西,以获取反向主机并将其替换为日志输出。

我想对第二个 IP“10.224.0.58”重复这一点。我想找到这个 IP 并将其替换为主机名。

但不仅仅是这两个特定的 IP 地址,任何 IP 地址。所以我想搜索 1 到 3 之间的 4 个整数,由 3 个句点“.”分隔。

正则表达式是前进的方向,还是使问题过于复杂?

非常感谢。

最佳答案

用主机名替换固定 IP 地址:

$ cat log | sed -r 's/10\.224\.0\.2/example.com/g'

用主机名替换所有 IP 地址:

$ cat log | sed -r 's/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/example.com/g'

如果你想调用外部程序,使用 Perl 很容易做到(只需将 host 替换为你的查找工具):

$ cat log | perl -pe 's/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/`host \1`/ge'

希望这足以让您入门。

关于regex - Bash 脚本 : sed/awk/regex to match an IP address and replace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13068730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com