我需要前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
答案 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