如何处理CIDR块/文本处理?

时间:2017-02-27 17:34:26

标签: bash shell awk ip cidr

我要处理CIDR块并在单行中将最后一个八位字节加2,以便在shell脚本中使用它。 例如,如果我的CIDR块是10.0.0.0/8,那么我的输出应该只有10.0.0.2。

2 个答案:

答案 0 :(得分:1)

假设您的线路仅包含IP地址和阻止,例如:

BLOCK=10.0.0.0/8

您可以使用awk

cut -d/ -f1 <<< "$BLOCK" | awk -F . 'BEGIN {OFS="."} {print $1,$2,$3,$4+2}'

答案 1 :(得分:1)

#!/bin/bash

# convert IP to decimal
ip2dec() {
  set -- ${1//./ }     # split $1 with "." to $1 $2 $3 $4
  declare -i dec       # set integer attribute
  dec=$1*256*256*256+$2*256*256+$3*256+$4
  echo $dec
}

# convert decimal to IP
dec2ip() {
  declare -i ip1 ip2 ip3 ip4
  ip1=$1/256/256/256
  ip2=($1-$ip1*256*256*256)/256/256
  ip3=($1-$ip1*256*256*256-$ip2*256*256)/256
  ip4=$1-$ip1*256*256*256-$ip2*256*256-$ip3*256
  echo $ip1.$ip2.$ip3.$ip4
}

dec=$(ip2dec ${1%/*}) # remove slash and mask
dec=$((dec+2))        # increment
dec2ip $dec

示例:./script.sh 10.0.0.0/8

输出:

10.0.0.2

此脚本源自我的IP range generator script