Добавить / Заменить символ в разделе строки - PullRequest
0 голосов
/ 04 марта 2020

Я хотел бы получить вашу помощь по этому вопросу: у меня есть эти IPv6s:

29c4:fe34:5:2087:86b8:2ff:fed1:9f24

2c0f:f4b8:1:2092:51:6ff:fe81:c600

Разделы разделены на ":", и мне нужно найти группы, которые имеют менее 4 цифр от пятой до Восьмой раздел и добавьте «0», чтобы получить что-то вроде этого:

29c4:fe34:5:2087:86b8:02ff:fed1:9f24

2c0f:f4b8:1:2092:0051:06ff:fe81:c600

Я пробовал с sed, но не успешно ... Честно говоря, я не представляю, как это сделать.

Большое спасибо заранее.

1 Ответ

3 голосов
/ 05 марта 2020

Пожалуйста, попробуйте решение sed:

sed -E ':l;s/^(([^:]+:){4,})(\b[[:xdigit:]]{1,3}\b)/\10\3/g;tl' inputfile

Результат:

29c4:fe34:5:2087:86b8:02ff:fed1:9f24
2c0f:f4b8:1:2092:0051:06ff:fe81:c600

[Объяснение]

  • Команда :l определяет метку от l до l oop.
  • Регулярное выражение (([^:]+:){4,}) будет соответствовать четырем ведущим или более полям, чтобы зарезервировать их без изменений.
  • Следующее регулярное выражение (\b[[:xdigit:]]{1,3}\b) будет соответствовать шестнадцатеричному значению, которое короче четырех цифр.
  • Тогда команда s заменит его, добавив начальный ноль с выражением \10\3, которое является объединением \ 1, "0 "и \ 3.
  • Последняя команда tl переходит к метке l, если команда s выполнена успешно. Затем он пытается следующую замену.
...