0

我是一名刚开始学习Bash脚本的新实习生。我正在处理一些包含以下格式的记录的安全日志文件:

Apr  9 14:11:44 10.10.12.10 NeXpose: VULNERABILITY: TCP timestamp response (generic-tcp-timestamp)

我正在尝试提取两个子字符串,即目标 ip 地址和漏洞描述,并使用awk写入文件,我可以一次提取其中一个。如

awk '{print $4}' >> output

给出IP地址

awk 'BEGIN { FS = " VULNERABILITY: ";  OFS = "|"} /VULNERABILITY/ { print '"$MY_VAR"' $2}'>> output 

给出字符串的最后一部分

有没有一种方法可以在一个句子中提取两者以方便输出?

太感谢了!

4

3 回答 3

1

您想为此使用cut

$ cut -d' ' -f5,8- file
10.10.12.10 TCP timestamp response (generic-tcp-timestamp)

该选项-d设置分隔符并-f让您指定字段编号。这里我们需要字段 5 和字段 8 中的所有内容。使用重定向将更改存储到新文件:

$ cut -d' ' -f5,8- file > outfile 

阅读man cut.

于 2013-05-28T07:50:10.503 回答
1

在 perl 中尝试:

perl -lne 'print $1." | ".$2 if(/(\d+\.\d+\.\d+\.\d+).*VULNERABILITY:(.*)/)' your_file

测试如下:

> cat temp
Apr  9 14:11:44 10.10.12.10 NeXpose: VULNERABILITY: TCP timestamp response (generic-tcp-timestamp)
>
> perl -lne 'print $1." | ".$2 if(/(\d+\.\d+\.\d+\.\d+).*VULNERABILITY:(.*)/)' temp
10.10.12.10 |  TCP timestamp response (generic-tcp-timestamp)
于 2013-05-28T07:53:02.233 回答
0

一种方法是与 character 分开:。最后一个字段是微不足道的,对于 IP 再次用空格拆分并获得第二个字段,例如:

awk -F: '{ 
    split( $3, f3, /[[:space:]]+/ ) 
    printf( "%s %s\n", f3[2], $NF ) 
}' infile

它产生:

10.10.12.10  TCP timestamp response (generic-tcp-timestamp)
于 2013-05-28T07:35:15.773 回答