Я нашел однострочное решение, используя grep и 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: \1\nUser expiring on \2!g' > display.txt
, и чтобы убедиться, что оно работает с любым MAC-адресом, с которым я тестировал:
mac=$(echo "00:09:34:29:86:6C") ; grep "$mac" expdate.txt -A 1 | sed -r ':a;N;$!ba;s!user.*=.(..\:..\:..\:..\:..\:..).*expdate.*=.(....-..-..)!UserID: \1\nUser expiring on \2!g' > display2.txt
Я сгенерировал вывод с нуля , если вам нужна замена в существующем файле, я предлагаю использовать язык шаблонов, например mustache . Версия Bash находится на GitHub
. Однако, поскольку кажется, что вам нужно повторно использовать MAC-адрес (сначала для поиска, а затем для вывода), я предлагаю создать сценарий bash , и он быть более пригодным для повторного использования.