【问题标题】:Isole Ip address from dhcp-range来自 dhcp-range 的隔离 IP 地址
【发布时间】:2014-12-04 08:33:55
【问题描述】:

我想从服务器配置文件中指定的 dhcp-range 行中提取 Bcast Ip 地址。

dhcp-range=192.168.42.1,192.168.42.253,255.255.255.0,192.168.42.255,24h

我想存储在一个变量 192.168.42.255

其实我在用

DNSMASQ_DIR="dnsmasq.conf"
if [ -e "$DNSMASQ_DIR" ]; then
    BcastAddress=`sed -n 3p $DNSMASQ_DIR | awk '{print $1}'`
    b=${BcastAddress:53:66}
    echo $BcastAddress
    echo $b
else
    echo "file not exists"
fi

返回:

dhcp-range=192.168.42.1,192.168.42.253,255.255.255.0,192.168.42.255,24h
192.168.42.255,24h

我不明白为什么要包含 ,24h。同时,我认为如果其他IP地址发生变化,我的方法将效率不高。有没有更有效的方法来解决我的问题?

【问题讨论】:

    标签: regex bash variables sed


    【解决方案1】:

    你也可以参考cut命令

    cut -d',' -f4 dnsmasq.conf
    

    示例:

    DNSMASQ_DIR="dnsmasq.conf"
    if [ -e "$DNSMASQ_DIR" ]; then
        b=`sed -n 3p $DNSMASQ_DIR | cut -d',' -f4 `
        echo $b
    else
        echo "file not exists"
    fi
    

    sed 命令打印第 3 行和 cut 命令提取 , 的第 4 列分隔符

    输出:

    192.168.42.255
    

    【讨论】:

    • @Tim Pietzcker,更新了我的答案。
    【解决方案2】:

    如果你想在awk做的话

    $ echo "dhcp-range=192.168.42.1,192.168.42.253,255.255.255.0,192.168.42.255,24h" | awk -F, '{print $4}'
    192.168.42.255
    

    您的代码的简化版本

    您甚至可以使用 awk as 来简化整个脚本

    $ awk -F, '/^dhcp-range/{print $4}' dnsmasq.conf
    192.168.42.255
    
    • -F, 将字段分隔符设置为,

    • /^dhcp-range/ 选择以dhcp-range 开头的行

    • print $4 打印第四列`

    $ awk -F, 'NR==3{print $4}' dnsmasq.conf
    192.168.42.255
    
    • NR==3 选择第三行

    【讨论】:

    • 再次感谢 nu11p01n73R !
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多