【问题标题】:Using Bash to Extract IP Addresses From Each Line of Log File使用 Bash 从日志文件的每一行中提取 IP 地址
【发布时间】:2015-07-07 11:34:06
【问题描述】:

有没有办法使用 bash /sed/awk 从日志文件的每一行中提取 IP 地址以显示 IP 主机对话或连接尝试?

日志文件示例:

*Teardown TCP connection -1948864210 for Node14:110.98.8.41 to Net_N:10.98.35.28 duration 0:02:01 bytes 0 SYN Timeout
Built outbound TCP connection -1948863670 for Net11:10.10.2.5 (10.10.2.5 to Net01:10.9.15.2 (10.9.15.2)
Deny tcp src Node22:10.128.4.201/2254 dst outside:10.198.2.1/5560 by access-group "111"*

必需的输出,列出 IP 对话/连接尝试:

110.98.8.41 10.98.35.28

10.10.2.5 10.9.15.2

10.128.4.201 10.198.2.1

我尝试使用 grep 去除 IP:

cat log.file | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | sort | uniq

但输出仅列出单个 IP 地址,而不是逐行 IP 对话

任何帮助表示赞赏..

【问题讨论】:

  • 第二行包含四个 IP 地址。你如何确定哪两个是你想要的?
  • 日志文件有定义的格式,我会使用awk
  • 抱歉,这是日志文件第二行的错字。每行仅包含 2 个唯一的 IP 地址

标签: linux bash awk sed


【解决方案1】:

要相邻打印 IP,请尝试以下命令:

cat first | grep -o '[0-9]\{0,3\}\.[0-9]\{0,3\}\.[0-9]\{0,3\}\.[0-9]\{0,3\}' | awk 'NR%2{printf $0"\t";next;}1' 

【讨论】:

    【解决方案2】:

    你可以这样做:

    octet='\<(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]?)\>'
    ip="$octet\\.$octet\\.$octet\\.$octet"
    grep -Eo "$ip" file | paste - -
    

    或者,使用已经发明的轮子

    perl -MRegexp::Common -lne '$,=" "; print /$RE{net}{IPv4}/g' file
    

    【讨论】:

    猜你喜欢
    • 2012-03-26
    • 1970-01-01
    • 2018-11-28
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2021-05-25
    相关资源
    最近更新 更多