Таким образом, я пытаюсь для преобразования одного формата MAC-адреса другому, т.е. от XXXX:XXXX:XXXX
кому: XX:XX:XX:XX:XX:XX
.
Я смог создать строку sed с помощью шаблонов, но могу только выполнить ее на MAC-адрес. Какие-либо предложения о том, как автоматизировать сценарий для выполнения его против последовательных MAC-адресов?
Вот пример:
$ echo 5254.0040.8beb | sed 's/\.//g' | sed -e 's/\([0-9A-Fa-f]\{2\}\)/\1:/g' -e 's/\(.*\):$/\1/'
52:54:00:40:8b:eb
Я не хочу выполнять его 100x:/
Способ сделать это должно сохранить все Ваши MAC-адреса в файле и затем работать эти sed
команда на файле. Ваш напрасно сложен, хотя, попробуйте это вместо этого:
$ echo 5254.0040.8beb | sed 's/\.//g; s/../&:/g; s/:$//'
52:54:00:40:8b:eb
первое s///
удаляет эти .
, вторые замены каждый набор 2 символов (..
) с собой (&
) и :
, и третье удаляет :
что предыдущая замена, добавленная в конец строки.
Для выполнения этого на файле MAC-адресов (один адрес на строку) сделайте:
sed 's/\.//g; s/../&:/g; s/:$//' file
$ echo 5254.0040.8beb | sed -r 's/\./:/g; s/([[:xdigit:]]{2})([[:xdigit:]]{2})/\1:\2/g'
52:54:00:40:8b:eb
Подход с awk: для работы с отдельными символами определите разделителя полей как пробел, избавьтесь от точки в исходном MAC-адресе и распечатайте точку после каждого второго символа. Для единственного MAC-адреса код будет похож на это:
echo 5254.0040.8beb | awk -F '' '{gsub(/\./,"");for(i=1;i<=NF;i++){printf $i;if(i%2 == 0 && i!=NF) printf ":" }}'
Мы можем превратить код в исполняемый сценарий, как так:
mac-editor.awk
. Его содержание находится в реве файла chmod 755 mac-editor.awk
; Выполнение код с входным файлом как аргумент как так
./mac-editor.awk input-file.txt
содержание сценария AWK
#!/usr/bin/awk -f
BEGIN {
FS="";
}
{
gsub(/\./,"");
for(i=1;i<=NF;i++){
printf $i;
if(i%2 == 0 && i!=NF)
printf ":"
};
printf "\n";
}
Демонстрация :
демонстрационный рев показывает, как сценарий ведет себя с входным файлом, где у Вас есть список MAC-адресов, один на строку.
$ cat mac-addresses.txt
7ab1.34b9.2eb0
2689.373c.d131
d271.a9a2.14c4
$ mac-editor.awk mac-addresses.txt
7a:b1:34:b9:2e:b0
26:89:37:3c:d1:31
d2:71:a9:a2:14:c4