将stdin传递给Unix主机或挖掘命令

时间:2009-08-07 20:21:48

标签: host dig

假设我有一个列入我正在拖尾的日志的IP列表:

1.1.1.1
1.1.1.2
1.1.1.3 

我想轻松地将它们解析为主机名。我希望能够

tail -f access.log | host - 

哪个失败,因为主机不会以这种方式理解来自stdin的输入。无需编写静态文件或回退到perl / python / etc,最简单的方法是什么?

4 个答案:

答案 0 :(得分:19)

使用xargs -l

tail -f access.log | xargs -l host

答案 1 :(得分:4)

你也可以使用read内置:

tail -f access.log | while read line; do host $line; done

答案 2 :(得分:3)

在以下命令中,如果需要,请将cat替换为tail -f等。

使用host

$ cat my_ips | xargs -i host {}
1.1.1.1.in-addr.arpa domain name pointer myhost1.mydomain.com.
1.1.1.2.in-addr.arpa domain name pointer myhost2.mydomain.com.

使用dig

$ cat my_ips | xargs -i dig -x {} +short
myhost1.mydomain.com.
myhost2.mydomain.com.

请注意,-i的{​​{1}}选项意味着xargs选项。

要首先获取某个主机的IP,请参阅this answer

答案 3 :(得分:0)

在bash中,您可以执行以下操作:

stdout | (dig -f <(cat))

示例程序:

(
cat <<EOF
asdf.com
ibm.com
microsoft.com
nonexisting.domain
EOF
) | (dig -f <(cat))

这样,您只需调用一次“ dig”。