Этот фрагмент, безусловно, может быть улучшен, но он должен выполнять свою работу:
hostname=ip-10-114-152-134.valter.henrique.com
hostip=$(echo ${hostname%%.*} | sed -e 's/ip-//' -e 's/-/./g')
${hostname%%.*}
удаляет все после (и в том числе) первого .
; Затем sed
удаляет начальный ip-
и заменяет затем тире точками.
Вы также можете использовать только одну команду sed
:
echo ip-10-114-152-134.valter.henrique.com | sed 's/ip-\(.*\)-\(.*\)-\(.*\)-\(.*\)\.valter\.henrique\.com/\1.\2.\3.\4/'
Регулярное выражение в первых скобках (вам нужно избегать этих: \(.*\)
) Присваивается \1
и так далее.
Вот последний вариант, использующий только функции 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