Este snippet certamente pode ser melhorado, mas deve fazer o trabalho:
hostname=ip-10-114-152-134.valter.henrique.com
hostip=$(echo ${hostname%%.*} | sed -e 's/ip-//' -e 's/-/./g')
${hostname%%.*}
remove tudo após (e incluindo) o primeiro .
; sed
, em seguida, remove o% inicialip-
e substitui os traços por pontos.
Você também pode usar apenas um comando sed
:
echo ip-10-114-152-134.valter.henrique.com | sed 's/ip-\(.*\)-\(.*\)-\(.*\)-\(.*\)\.valter\.henrique\.com/.../'
O regex nos primeiros colchetes (você precisa escapar destes: \(.*\)
) é atribuído a e assim por diante.
Aqui está a última variante, usando apenas funções bash:
IFSsave="$IFS"; IFS=- # save IFS prior modifying it
hostip=""
hostname=ip-10-114-152-134.valter.henrique.com # initial values
hostname=${hostname#*-} # remove the "ip-" part
hostname=${hostname%%.*} # remove the ".valter.henrique.com" part
for i in $hostname; do # loop over 10-114-152-134, splitted at "-" ($IFS)
hostip="${hostip}${i}." # append number. to $hostip
done
hostip=${hostip%.} # remove trailing dot
echo $hostip # print resulting IP
IFS="$IFSsave" # restore IFS