#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. Если он соответствует этим условиям, выведите строку