URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 95930
[ Назад ]

Исходное сообщение
"перевернуть ip (bash)"

Отправлено Вася , 05-Янв-15 11:01 
Подскажите пожалуйста, как на bashе перевернуть ip
есть к примеру ip: 192.168.0.1

хочу вывести: 1.0.168.192

Спасибо


Содержание

Сообщения в этом обсуждении
"перевернуть ip (bash)"
Отправлено Andrey Mitrofanov , 05-Янв-15 11:11 
> Подскажите пожалуйста, как на bashе перевернуть ip
> есть к примеру ip: 192.168.0.1
> хочу вывести: 1.0.168.192

$ ip=192.168.0.1
$ IFS=. <<<"$ip" read a b c d
$ ip="$d.$c.$b.$a"


$ echo 192.168.0.1 |tr . \\n |tac |tr \\n .


"перевернуть ip (bash)"
Отправлено Вася , 05-Янв-15 11:17 
Спасибо, Андрей, то, что надо.

>> Подскажите пожалуйста, как на bashе перевернуть ip
>> есть к примеру ip: 192.168.0.1
>> хочу вывести: 1.0.168.192
> $ ip=192.168.0.1
> $ IFS=. <<<"$ip" read a b c d
> $ ip="$d.$c.$b.$a"
> $ echo 192.168.0.1 |tr . \\n |tac |tr \\n .


"перевернуть ip (bash)"
Отправлено fantom , 06-Янв-15 10:13 
> Спасибо, Андрей, то, что надо.
>>> Подскажите пожалуйста, как на bashе перевернуть ip
>>> есть к примеру ip: 192.168.0.1
>>> хочу вывести: 1.0.168.192
>> $ ip=192.168.0.1
>> $ IFS=. <<<"$ip" read a b c d
>> $ ip="$d.$c.$b.$a"
>> $ echo 192.168.0.1 |tr . \\n |tac |tr \\n .

$ echo 12.23.34.45 | awk -F. '{print $4"."$3"."$2"."$1}'
45.34.23.12


"перевернуть ip (bash)"
Отправлено михалыч , 08-Янв-15 19:11 
> хочу вывести: 1.0.168.192

я тоже хочу ))

echo 1.0.168.192 | sed 's/\(.*\)\.\(.*\)\.\(.*\)\.\(.*\)/\4.\3.\2.\1/'

но, признаю, на awk -то оно покрасивше будет


"перевернуть ip (bash)"
Отправлено Алексей , 09-Янв-15 00:23 
Вопрос был, как перевернуть ip на bash, а не на awk, sed или Perl.

Например, так

reverse_ip()
{
  if [[ "$1" =~ ([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3}) ]]; then
    echo "${BASH_REMATCH[4]}.${BASH_REMATCH[3]}.${BASH_REMATCH[2]}.${BASH_REMATCH[1]}"
  fi
}

reverse_ip 192.168.0.1


"перевернуть ip (bash)"
Отправлено fantom , 10-Янв-15 15:34 
> Вопрос был, как перевернуть ip на bash, а не на awk, sed
> или Perl.
> Например, так
> reverse_ip()
> {
>   if [[ "$1" =~ ([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3}) ]]; then
>     echo "${BASH_REMATCH[4]}.${BASH_REMATCH[3]}.${BASH_REMATCH[2]}.${BASH_REMATCH[1]}"
>   fi
> }
> reverse_ip 192.168.0.1

echo не является элементом bash :) для полноты картины надо тада уже и без него обойтись ;)


"перевернуть ip (bash)"
Отправлено pavel_simple , 10-Янв-15 22:04 
>[оверквотинг удален]
>> Например, так
>> reverse_ip()
>> {
>>   if [[ "$1" =~ ([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3}) ]]; then
>>     echo "${BASH_REMATCH[4]}.${BASH_REMATCH[3]}.${BASH_REMATCH[2]}.${BASH_REMATCH[1]}"
>>   fi
>> }
>> reverse_ip 192.168.0.1
> echo не является элементом bash :) для полноты картины надо тада уже
> и без него обойтись ;)

man bash


"перевернуть ip (bash)"
Отправлено Алексей , 10-Янв-15 23:13 
> echo не является элементом bash :) для полноты картины надо тада уже
> и без него обойтись ;)

К вашему сведению, echo - это bash builtin, а вот /bin/echo не является элементом bash.


"перевернуть ip (bash)"
Отправлено Алексей , 10-Янв-15 23:21 
Если не требуется проверять корректность входных данных, то можно обойтись без регулярного выражения.

reverse_ip()
{
  local IFS="."
  IP=($1)
  echo "${IP[3]}.${IP[1]}.${IP[2]}.${IP[0]}"
}

reverse_ip 192.168.0.1