从DNS捕获中获取记录

时间:2017-06-29 09:11:52

标签: awk sed dns

我是初次使用正则表达式,但想知道我们是否可以使用任何正则表达式进行下面的捕获。我希望看到" A"在下面的日志中。

  3   0.238497  x.x.x.x -> x.x.x.x DNS 101 Standard query 0xab5d  A servicesx.x.x.x
  6   0.241131 x.x.x.x -> x.x.x.x  DNS 117 Standard query response 0xab5d  A x.x.x.x
  7   0.407185  x.x.x.x -> x.x.x.x DNS 100 Standard query 0x7699  A vipservices-x.x.x.x
  8   0.409849 x.x.x.x -> x.x.x.x  DNS 116 Standard query response 0x7699  A x.x.x.x
  9   2.905559  x.x.x.x -> x.x.x.x DNS 101 Standard query 0x9c5d  A servicesx.x.x.x
 10   2.908308 x.x.x.x -> x.x.x.x  DNS 117 Standard query response 0x9c5d  A x.x.x.x
 11   3.261304  x.x.x.x -> x.x.x.x DNS 101 Standard query 0x9575  A servicesx.x.x.x
 12   3.263582 x.x.x.x -> x.x.x.x  DNS 117 Standard query response 0x9575  A x.x.x.x
 13   4.898380  x.x.x.x -> x.x.x.x DNS 101 Standard query 0x451a  A servicesx.x.x.x
 14   4.900842 x.x.x.x -> x.x.x.x  DNS 117 Standard query response 0x451a  A x.x.x.x
 15   5.406778  x.x.x.x -> x.x.x.x DNS 100 Standard query 0x4f52  A vipservices-x.x.x.x

我想输出类似的东西。

A servicesx.x.x.x
A vipservices-x.x.x.x
A servicesx.x.x.x

任何领导都将不胜感激。

4 个答案:

答案 0 :(得分:0)

$ awk '{if(match($NF,"service")!=0) print $(NF-1),$NF}' file
A servicesx.x.x.x
A vipservices-x.x.x.x
A servicesx.x.x.x
A servicesx.x.x.x
A servicesx.x.x.x
A vipservices-x.x.x.x

如果最后一个字段与模式"service"匹配,则打印$(NF-1) & $NF

答案 1 :(得分:0)

尝试:

awk '$NF ~ /services/{print $(NF-1),$NF}'   Input_file

检查行的最后一个字段是否包含服务字符串,如果是,则打印该行的倒数第二个字段和最后一个字段。

答案 2 :(得分:0)

打印所有内容,然后打印A,包括A.

grep -o 'A.*' inputFile

grep解决方案:使用-o标志打印仅匹配的字符串。

grep -o 'A.*service.*' inputFile
A servicesx.x.x.x
A vipservices-x.x.x.x
A servicesx.x.x.x
A servicesx.x.x.x
A servicesx.x.x.x
A vipservices-x.x.x.x

A.*service.*:表示A后跟零个或多个字符,后跟服务,后跟所有内容。

答案 3 :(得分:0)

健壮,便携,高效地打印来自您A的所有内容:

awk '$(NF-1) == "A" { print $(NF-1}, $NF }' file

否则至少可以移植到所有UNIX系统的正则表达式解决方案将是:

sed -n '/.*A/A/p' file