как я могу написать регулярное выражение наличными, чтобы получить IP-адреса в диапазоне от 162-175 и адреса обратной связи

#python #linux #bash #shell

#python #linux #bash #оболочка

Вопрос:

Эй, я пытаюсь написать регулярное выражение bash, чтобы получить адреса, начинающиеся с 127, и те, которые находятся между 162-175, может кто-нибудь поправить меня, где я ошибаюсь

sed -n 's/([0-9]{3}.){3}[0-9]{1,3}/nipamp;n/gp' ips.txt | grep ip | sed 's/ip//'| sort | uniq | cut -d " " -f 1

Комментарии:

1. Пожалуйста, создайте минимальный, полный и воспроизводимый пример. Укажите, как ваше решение терпит неудачу.

2. ни один из упомянутых IP-адресов не фильтруется

Ответ №1:

Awk, вероятно, был бы лучшим инструментом для этого:

 awk '{ 
        if ( match($0,/([0-9]{1,3}.){3}[0-9]{1,3}/)) { 
                  split(substr($0,RSTART,RLENGTH),map,".");
                  if ( map[1] == 127 || ( map[1] >= 162 amp;amp; map[1] <= 175 ) ) { 
                            print $0 
                   } 
        } 
      }' file
 

Один вкладыш:

 awk '{ if ( match($0,/([0-9]{1,3}.){3}[0-9]{1,3}/)) { split(substr($0,RSTART,RLENGTH),map,".");if ( map[1] == 127 || ( map[1] >= 162 amp;amp; map[1] <= 175 ) ) { print $0 } } }' file
 

Для каждой строки сопоставьте шаблон с ip-адресом, используя функцию сопоставления awk. Возьмите первый элемент этого IP-адреса, который помещается в первый индекс карты массива, используя функцию разделения awk. Проверьте, равно ли это значение map[1] 127 или между 162 и 175. Если он соответствует этим условиям, выведите строку