BASH - Удаленный ведущий ноль в IP-адресе - PullRequest
2 голосов
/ 18 марта 2020

У меня есть следующая команда bash, которая удаляет ведущий ноль ... но она также удаляет один ноль, что неверно.

echo $ip | sed 's/\.0\{1,2\}/\./g' | sed 's/^0\{1,2\}//'

if $ip is 192.168.1.01  the result should be 192.168.1.1
if $ip is 192.168.01.01  the result should be 192.168.1.1
if $ip is 192.168.0.01  the result should be 192.168.0.1
if $ip is 192.168.0.0  the result should be 192.168.0.0
etc

Я получаю 192.168. 0.0 становится 192.168 .. или 192.168.0.01 становится 192.168..1

Есть идеи, как это сделать?

Спасибо

1 Ответ

4 голосов
/ 18 марта 2020

То, что вы делаете сейчас, - это замена любого .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*//'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...