【问题标题】:getent hosts to take initial 3 up digit+hostname unixgetent 主机取初始 3 上位数字+主机名 unix
【发布时间】:2016-12-17 18:36:32
【问题描述】:

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

【问题讨论】:

    标签: python awk sed cut


    【解决方案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]) 执行替换。要删除最后一个点的所有内容,我们将其替换为空字符串。

    我们如何匹配最后一个点的所有内容?使用/\.[^.]*$/,表示:匹配一个点,然后匹配除点之外的任何字符,直到字段末尾。

    【讨论】:

    • 我对其进行了如下编辑,产生了相同的输出。{ $ getent hosts myhosts | awk '{sub(/\.[^.]*$/,"",$1); print $0}' 172.10.2 myhosts.lab.com }
    • 请尽可能解释正则表达式
    • @KarnKumar 解释已添加
    • @fedorquie .. 非常感谢。
    【解决方案2】:
    $ 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
    

    【讨论】:

    • 优秀的 Sed 解决方案,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-04-03
    • 2015-09-29
    • 1970-01-01
    • 2013-02-25
    • 2012-02-02
    • 2012-06-21
    • 2012-09-22
    • 1970-01-01
    相关资源
    最近更新 更多