Eu encontrei uma solução de uma linha usando grep e sed:
mac=$(ifconfig eth1 | grep -o -E '([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}'); grep "$mac" expdate.txt -A 1 | sed -r ':a;N;$!ba;s!user.*=.(..\:..\:..\:..\:..\:..).*expdate.*=.(....-..-..)!UserID: \nUser expiring on !g' > display.txt
e para validar, funciona com qualquer endereço mac com o qual testei:
mac=$(echo "00:09:34:29:86:6C") ; grep "$mac" expdate.txt -A 1 | sed -r ':a;N;$!ba;s!user.*=.(..\:..\:..\:..\:..\:..).*expdate.*=.(....-..-..)!UserID: \nUser expiring on !g' > display2.txt
Gerei a saída do zero, se você precisar de uma substituição em um arquivo existente, sugiro usar uma linguagem de templates como o bigode . A versão do Bash está em GitHub
No entanto, porque parece que você precisa reutilizar o endereço MAC (para procurar primeiro e depois para a saída), sugiro fazer um script bash e seria mais reutilizável.