来自dhcp-range的Isole IP地址

时间:2014-12-04 08:33:55

标签: regex bash variables sed

我想从dhcp-range行中提取Bcast IP地址,该地址在服务器配置文件中指定。

DHCP-范围= 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

我不明白为什么,包括24小时。与此同时,我认为如果其他IP地址发生变化,我的方法将无效。有没有更有效的方法来解决我的问题?

2 个答案:

答案 0 :(得分:2)

您也可以参考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

答案 1 :(得分:1)

如果您想在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作为

来简化整个脚本
$ 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选择第三行