Нахождение групп IP-адресов в файле

Необходимо будет добавить эту строку к Вашему ~/.xxxterm.conf файл:

userstyle_global = 1

От man xxxterm

 xxxterm tries to open the user specific file, ~/.xxxterm.conf.  If that file
 is unavailable, it then uses built-in defaults.

 The format of the file is <keyword> = <setting>.  For example:

       http_proxy = http://127.0.0.1:8080

 Enabling or disabling an option is done by using 1 or 0 respectively.

[...]

       userstyle_global            When enabled new tabs will automatically
                                   be displayed in low contrast mode.
3
08.09.2014, 17:08
3 ответа

Вы не приняли другие решения, возможно, потому, что их вывод не совпадает с запрошенным "Лондон и Германия"

Современный Python может обрабатывать IP-адреса вне поля:

#! /usr/bin/env python3.4
# coding: utf-8
# also works on 2.7 after installing ipaddress from PyPI

import sys
from ipaddress import ip_address
print

ip_string = sys.argv[1]
if sys.version_info < (3,):
    ip_string = ip_string.decode('utf-8')

ip = ip_address(ip_string)

locs = []
for line in open('input'):
    try:
        loc, rest = line.split(':')
    except ValueError:
        try:
            if sys.version_info < (3,):
                sr, er = map(ip_address, [x.decode('utf-8') for x in line.rstrip().split('-')])
            else:
                sr, er = map(ip_address, line.rstrip().split('-'))
            if sr < ip < er:
                locs.append(loc)
        except ValueError:
            print 'error in input line:', repr(line)
            break

if len(locs) > 2:
    locs = [', '.join(locs[:-1]), locs[-1]]
print(' and '.join(locs))

Это печатает найденные местоположения и ставит "и" между двумя последними найденными местоположениями и "," между всеми остальными (когда применимо): e. g. Лондон, Париж и Германия

Предполагается, что данные находятся в файле с именем input, делают скрипт исполняемым, или вызывают с помощью python scriptname 172.25.2.32

2
27.01.2020, 21:14

В этом случае использование одного из многих языков программирования общего назначения, которые обычно доступны для Unix и системы Linux (либо в рамках установки по умолчанию, либо через простую установку пакетов), вероятно, является самым простым. Вот пример того, как бы вы выполнили поставленную задачу, используя Ruby:

#!/usr/bin/env ruby
require 'ipaddr'

ip = ARGV[0]
ARGV.delete(ip)
last_location = nil
ARGF.each do |line|
  if line.include?(':')
    last_location = line.chomp.gsub(/:/, "")
    next
  end

  first, last = line.chomp.split("-").map {|i| IPAddr.new(i).to_i }
  needle = IPAddr.new(ip).to_i
  if (first..last).include?(needle)
    puts "Found #{ip} in #{last_location}"
  end
end

Это не особенно хороший Ruby, но он способен воспользоваться библиотекой ipaddr, чтобы избежать ручного разбора IP-адресов. Хотя ручная обработка не будет большой проблемой в вашем тексте примера, она будет более сложной, если у вас есть диапазоны, такие как 172.25.2.0-172.25.3.200.

Ваш вопрос помечен bash и текстовая обработка . Если вы ищете ответ, используя более широко доступные инструменты обработки текста, такие как sed, awk и grep, то вы можете просто посмотреть на общую стратегию, содержащуюся в сценарии рубина выше:

  1. Храните аргумент IP-адреса в переменной для легкого доступа позднее
  2. Читайте каждую строку файла
  3. Определите, является ли строка описанием местоположения или диапазоном IP-адресов.
  4. Если это описание местоположения, сохраните его в last_location
  5. Если это диапазон IP-адресов, определите, находится ли ваш IP в этом диапазоне
  6. Если ip находится в этом диапазоне, распечатайте переменную last_location.

Это не самое элегантное решение, но его легко реализовать на нескольких языках, и за ним легко будет последовать любой, кто знаком с этим языком.

2
27.01.2020, 21:14

Perl версия Ответ Стивена :

perl -MSocket -F- -lane '
  sub ip_to_n {unpack"N",inet_aton$_[0]}
  BEGIN {$i=ip_to_n(shift)}
  if (/:$/) {chop;$l=$_} else {
    print $l if $i >= ip_to_n($F[0]) && $i <= ip_to_n($F[1])
  }' 172.25.2.32 file1 file2...
2
27.01.2020, 21:14

Теги

Похожие вопросы