К сожалению, sed
не может запускать внешние команды, одновременно передавая параметры, взятые из входных данных.
Это решение сценария Bash, которое вам подойдет:
tail -f dnsmasq.log | { while IFS= read -r line ; do { [[ "${line}" =~ ": query[A]" ]] && printf '%s %s\n' "${line% *} " $(dig +short -x "${line##* }"); } || echo "${line}"; done ; }
Разбито для объяснения:(только для ясности, может не работать при копировании и вставке)
tail -f dnsmasq.log | \
{ \
while IFS= read -r line ; do \ # for each line read in from tail...
if [[ "${line}" =~ ": query[A]" ]] ; # if it has the literal string ': query[A]'
then \
printf '%s %s\n' "${line% *} " \ # print it (purged of last field, which is the IP address)...
$(dig +short -x "${line##* }") \ # along with dig's output
else \ # otherwise...
echo "${line}" \ # just print it all as it is
fi \
done ; \
}