Запись сценария для автоматического выполнения против последовательных переменных

Таким образом, я пытаюсь для преобразования одного формата 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:/

0
задан 6 October 2015 в 00:17

3 ответа

Способ сделать это должно сохранить все Ваши 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
1
ответ дан 1 October 2019 в 00:28
$ echo 5254.0040.8beb | sed -r 's/\./:/g; s/([[:xdigit:]]{2})([[:xdigit:]]{2})/\1:\2/g'
52:54:00:40:8b:eb
1
ответ дан 1 October 2019 в 00:28

Подход с 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 ":"   }}'

Мы можем превратить код в исполняемый сценарий, как так:

  1. создают файл, названный mac-editor.awk. Его содержание находится в реве файла
  2. , Делают исполняемый файл сценария с chmod 755 mac-editor.awk;
  3. Выполнение код с входным файлом как аргумент как так

    ./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
1
ответ дан 1 October 2019 в 00:28

Другие вопросы по тегам:

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