Я пытаюсь заменить все IP-адреса именами хостов в моем журнале dnsmasq в режиме реального времени при запуске tail -F.
Мне интересны строки запроса [A], например:
3 мая 20:32:35 dnsmasq [18422]: запрос [A] mobile.pipe.aria.microsoft.com от 192.168.1.145
И я бы хотел получить IP-адрес конечного устройства (192.168.1.145) для замены на полное доменное имя.
Сначала я пытался заставить его работать с правильной линией sed, но кажется, что соответствующая группа не прошла должным образом через \ Параметр 1 sed:
echo "something 192.168.1.145"|sed -r "s#([1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9])#$(dig @192.168.1.1 +short -x "\\1")#"
Результат:
dig: '\ 1.in-addr.arpa.' не является допустимым именем (недопустимое побег) что-то
Подобная ошибка возникает, когда я использую host cmd ( host: '\ 1' не имеет допустимого синтаксиса имени (неожиданный конец ввода) ). Я не уверен, почему это так, но когда я отображаю с помощью echo или printf, все хорошо:
echo "something 192.168.1.145"|sed -r "s#([1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9])#$(echo -n "\\1")#"
или
echo "something 192.168.1.145"|sed -r "s#([1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9])#$(printf "%s" \\1)#"
Результаты приведены ниже (так что подобранная группа, которая действительный IP-адрес передается через параметр sed):
что-то 192.168.1.145
Я пробовал некоторые приемы, такие как передача его через xargs, но все же не повезло:
echo "something 192.168.1.145"|sed -r "s#([1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9]\.[1-2]?[0-9]?[0-9])#$(echo -n "\\1"|xargs -l dig @192.168.1.1 +short -x)#"
Имейте в виду, у меня нет GNU-версии sed, но есть ограниченная версия BusyBox (это AsusWRT-Merlin, поэтому, например, флаг sed e не поддерживается), поэтому мои возможности ограничены. Любые идеи ?