Вы можете использовать следующее регулярное выражение:
^(([[:xdigit:]]{1,4}:){7}[[:xdigit:]]{1,4}\/)32$
demo
и встроить его в команду sed
:
sed -E 's@^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}\/)32$@\1128@g'
, где опция -E
используется для включения расширенного регулярного выражения, если вы не укажете эту опцию, вам придется экранировать (
, и это неприятно.
- Прописные буквы в вашем IPv6-адресе также будут учитываться!
^
, $
якоря используются для добавления ограничения к вашему регулярному выражению @
используется в качестве разделителя в вашей команде поиска / замены, и замена является обратной ссылкой на IPv6, и вы добавляете 128
к нему, поскольку 32
не входит в группу, как если бы вы заменили его на 128
ВХОД:
52.222.128.45/32
172.22.187.101/32
52.222.128.248/32
2600:2000:2046:2000:3:db06:4200:23a1/32
2600:2000:2046:5800:3:DB06:4200:23a1/32
2600:2000:2046:7800:3:dB06:4200:23a1/32
ВЫХОД:
52.222.128.45/32
172.22.187.101/32
52.222.128.248/32
2600:2000:2046:2000:3:db06:4200:23a1/128
2600:2000:2046:5800:3:DB06:4200:23a1/128
2600:2000:2046:7800:3:dB06:4200:23a1/128
С awk
Вы также можетедостичь аналогичного результата:
$ cat testip | awk -F'/' '/^([[:xdigit:]]{1,4}:){7}[[:xdigit:]]{1,4}\/32$/{print $1"/"128; next}1'
52.222.128.45/32
172.22.187.101/32
52.222.128.248/32
2600:2000:2046:2000:3:db06:4200:23a1/128
2600:2000:2046:5800:3:db06:4200:23a1/128
2600:2000:2046:7800:3:db06:4200:23a1/128
, где вы используете в качестве разделителя полей /
и аналогичное регулярное выражение, когда строка соответствует шаблону, вы печатаете 1-е поле (соответствующее части IPv6), за которым следует /128
затем вы переходите к следующей строке.По умолчанию вы печатаете строку.