Команда SED - MAC-адрес

Я использую MAC-адрес машины в качестве идентификатора пользователя и хочу обновить файл (display.txt), в котором будет отображаться идентификатор пользователя / истечение срока. Как заменить expdate в display.txt датой в expdate.txt , соответствующей MAC-адресу.

Мне удалось использовать идентификатор пользователя:

sed -i "s/user/$(ifconfig eth0 |
                 grep -o -E '([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}')/" \
/user/id/display.txt > /dev/null

display.txt:

UserID: user
User expiring on expdate

expdate.txt:

user                          = 00:09:34:2C:66:AB
expdate                       = 2017-05-20
user                          = 00:09:34:29:86:6C
expdate                       = 2017-08-23

Я хотел бы иметь:

display.txt:

UserID: 00:09:34:29:86:6C
User expiring on 2017-08-23
0
26.11.2018, 01:45
2 ответа

Я нашел однострочное решение, используя 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 , и он быть более пригодным для повторного использования.

0
28.01.2020, 04:48

Объединяя sed , выводит:

sed -e 's/user/UserID/g' expdate.txt | sed -e 's/ //g' | sed -e 's/=/: /g' | sed -e 's/expdate:/User expiring on/g' > display.txt

(Совершенно очевидно, что это можно сделать также только с одним sed )

0
28.01.2020, 04:48

Теги

Похожие вопросы