sed
для спасения:
macnew=$(echo $machex | sed 's/../&:/g;s/:$//')
Узор
+------------ substitute
| +--------- any two characters
| | +------- with the whole match
| | |+------ and :
| | || +---- all occurrences, utilizing the fact it means non-overlapping
| | || |+------- another command
| | || ||+------ substitute
| | || || +---- :
| | || || |+--- at the end of line
| | || || || +- with nothing to get rid of the trailing :
V V VV VV VV V
s/../&:/g;s/:$//
Вы также должны убедиться, что на самом деле напечатаны 12 цифр. Команда printf
может сделать это, просто сделайте шаблон "%012x"
- 0
означает pad с 0
s (вместо пробелов) и 12
- минимальная ширина. Используйте прописные буквы X
для прописных шестнадцатеричных цифр и строчные буквы x
для строчных шестнадцатеричных цифр.
Вы можете немного упростить сложение, используя встроенное арифметическое расширение bash, которое непосредственно понимает шестнадцатеричный вывод и понимает как верхний, так и нижний регистр, поэтому вам нужно только отбросить :
s:
mac=$(echo $oldMAC | tr -d ':')
macadd=$(( 0x$mac + 1 ))
Он все еще возвращается как десятичное число, поэтому вам все еще нужен printf "% 012x" для его преобразования. Вы можете направить его прямо в седьку, чтобы она была короткой.
macnew=$(printf "%012x" $macadd | sed 's/../&:/g;s/:$//')