getent hosts取最初的3位数+主机名unix

时间:2016-08-11 06:55:27

标签: python awk sed cut

我需要前3个八位字节的IP地址和myhosts名称,而我正在尝试通过cut命令但无法加入主机名

$ getent hosts myhosts
172.10.2.32    myhosts.lab.com
任何有awk,sed,cut,python的东西都没关系

$ getent hosts myhosts | cut -d "." -f1,2,3
172.10.2

输出应为:

172.10.2  myhosts.lab.com

2 个答案:

答案 0 :(得分:1)

在第一个字段中,删除最后一个点中的所有内容:

$ awk '{sub(/\.[^.]*$/,"",$1); print $1, $2}' <<< "172.10.2.32    myhosts.lab.com"
172.10.2 myhosts.lab.com

我们有两个字段:IP和主机名。主机名将在没有任何更改的情况下返回,而对于IP,我们要删除最后一个块。

要调整第一个字段$1,我们使用sub()。这使用语法sub(regexp, replacement [, target])执行替换。要从最后一个点删除所有内容,我们将其替换为空字符串。

我们如何匹配最后一个点的所有内容?使用/\.[^.]*$/,这意味着:匹配一个点,然后匹配任何类型的字符,但一个点直到字段的结尾。

答案 1 :(得分:0)

$ sed -E 's/\.[0-9]+ +/ /' <<< '172.10.2.32    myhosts.lab.com'
172.10.2 myhosts.lab.com

或者如果命令输出中的空格可以包含制表符或其他不可见的字符:

$ sed -E 's/\.[0-9]+[[:blank:]]+/ /' <<< '172.10.2.32    myhosts.lab.com'
172.10.2 myhosts.lab.com