используя bash с sed, как извлечь ip из команды hostname и сохранить его в файле / etc / hosts - PullRequest
2 голосов
/ 04 августа 2020

Я хочу сохранить запись в файле / etc / hosts для IP-адреса ящика, в котором я нахожусь.

Когда я запускаю следующую команду, я получаю:

:-$ hostname
ip-10-55-9-102

Я хочу сохранить эту запись в / etc / hosts следующим образом:

Ожидаемый результат: 10.55.9.102 ip-10-55-9-102

Я пробовал, но пока ....

ТЕКУЩЕЕ РЕШЕНИЕ:

ip=$(hostname -I | cut -d ' ' -f1); echo "$ip ip-${ip//+([.:])/-}" >> /etc/hosts

Фактический результат: 10.55.9.102 ip-10.55.9.102

Примечание. Ожидаемое значение имеет «-», а Фактическое - «.» между числами.

Ответы [ 4 ]

2 голосов
/ 04 августа 2020

Ваш logi c хорош, но вы не используете правильный шаблон при подстановке строк. Вы должны были написать следующее:

ip=$(hostname -I | cut -d ' ' -f1); echo "$ip ip-${ip//[.:]/-}" >> /etc/hosts
1 голос
/ 04 августа 2020

Как насчет использования awk ?

hostname | awk -F- '{printf "%s.%s.%s.%s %s\n", $2, $3, $4, $5, $0}' >> /etc/hosts

Команда awk использует флаг -F-, чтобы указать da sh в качестве разделителя полей. Команда printf выбирает поля # 2, 3, 4, 5, а также $ 0, который представляет собой всю строку.

0 голосов
/ 04 августа 2020

Существует системная переменная $HOSTNAME, аналогичная команде hostname. Итак, если ваше имя хоста содержит IP-адрес, вы можете сделать это:

ip=${HOSTNAME//ip-} # create 'ip' var from $HOSTNAME and remove 'ip-'
ip=${ip//-/.}       # change '-' to '.' in 'ip' var
printf "$ip\t$HOSTNAME" >> /etc/hosts # add desired string to /etc/hosts

Или используя hostname, чтобы получить ip:

ip=( $(hostname -I) )
printf "$ip\t$HOSTNAME" >> /etc/hosts
0 голосов
/ 04 августа 2020

С обычным bash:

ip=$(hostname -I)
ip=${ip%%[[:space:]]*}
printf "%s\tip-%s\n" "$ip" "${ip//./-}" # >> /etc/hosts

Отбросьте #, если он работает должным образом.

...