То, что вы делаете сейчас, - это замена любого .0
на .
. Это, очевидно, также поймает 1.1.0.0
.
Это будет работать:
echo $ip | sed 's/\.0\+\([1-9]\)/\.\1/g; s/^0\+//'
Здесь мы ищем .0[1-9]
, который будет соответствовать только ведущему 0, за которым следует другое число , Вы видите, что я использовал \([1-9]\)
, который сохраняет конечный номер и помещается в подстановку с помощью \1
.
EDIT :
@ tomgalpin. ведущие 0 в начале. У меня нет плавного способа обработки этого с помощью одной команды, поэтому я просто добавил это как отдельную подстановку: s/^0\+//
.
EDIT 2
Looks как мое решение не работает с опцией --posix
из-за +
. Замена этого на *
также будет работать, хотя и делает избыточные совпадения. Также с -E
это немного чище:
echo $ip | sed -E 's/\.0*([1-9])/\.\1/g; s/^0*//'