2015-03-30 1 views
0

Я пишу сценарий на баш читать MAC-адрес из группы устройств, и я stucked с одним переключателем, который возвращает адрес не доводя 0. Например:Добавить ведущий от 0 до MAC-адрес в Баш

0: A: B: 11: 22: C ->, который будет -> 00: 0A: 0B: 11: 22: 0C

Есть ли способ, которым регулярное выражение могло бы добавить эти ведущие нули? Я мог бы взять каждый адрес отдельно, взять его байты и настроить его, но мне было интересно, есть ли более простой способ.

+0

Hi anishane. Я попытался разрезать строку на куски, разделенные символом «:», проверяя их размер и добавив 0, если это 1; но я отбросил это решение (слишком «тяжелое» и не совсем хорошо контактировал). – Pete

ответ

2

Вы можете использовать sed. \b соответствует символу слова и символу, отличному от слова. Таким образом, \b\(\w\)\b захватывает подстроку с одним символом слова.

sed 's/\b\(\w\)\b/0\1/g' file 

Пример:

$ echo '0:A:B:11:22:C' | sed 's/\b\(\w\)\b/0\1/g' 
00:0A:0B:11:22:0C 
+0

Для более точного использования вы можете использовать 'sed 's/\ b \ ([0-9A-Z] \) \ b/0 \ 1/g'' –

+0

Удивительный! действительно элегантный и отлично работает :) – Pete

0

Вот способ сделать это в самом BASH с помощью read и printf встроенных модулей:

s='0:A:B:11:22:C' 
IFS=: read -ra arr <<< "$s" 
printf -v str "%02s:" "${arr[@]}" 
echo "${str%:}" 
00:0A:0B:11:22:0C 

 Смежные вопросы

  • Нет связанных вопросов^_^