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

Мне было интересно, есть ли способ записать запись в файл / etc / hosts, выполнив следующие действия с помощью сценария bash (. sh)

  1. Получите IP-адрес команда хоста, например (может быть любой URL)

host cloud.com

Результат будет следующим:

cloud.com имеет адрес 50.17.245.212

Наконец, я хочу вставить в файл / etc / hosts следующее:

50.17.245.212 ip-50-17-245-212

Примечание. Первый IP-адрес - это URL-адрес, за которым следует префикс -ip , а затем точки заменяются на «-»

Я пробовал с копанием, но результат длинный, буду благодарен за любые указатели здесь.

Ответы [ 2 ]

3 голосов
/ 13 июля 2020

Одиночная (GNU) sed команда:

host cloud.com |
sed -E -n 's/.* has address (([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)).*/\1 ip-\2-\3-\4-\5/p'

Перенаправить вывод по мере необходимости, например >> /etc/hosts

1 голос
/ 13 июля 2020
url=cloud.com

пробел в качестве разделителя для cut для печати только 4-го поля

ip=$(host $url | cut -d ' ' -f4)

или регулярного выражения для grep только допустимый ipv4 / ipv6

ip=$(host $url | grep -ioE '([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) | (([a-f0-9:]+:+)+[a-f0-9]+)')

эхо-переменная ${ip} с манипуляциями со строками // замените +() несколько вхождений [.:] точек или двоеточий / на -

echo "$ip ip-${ip//+([.:])/-}" | tee -a /etc/hosts
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...