2013-11-26 2 views
1

나는 문제가이 작업을 얻는 데, 나는 어떤 아이디어를 바라고 :IPv4 주소 대체

내 목표 : 라인으로 라인을 읽고, 파일을위한 모든 IP 주소를 대체하기 특정 대체 파일을 작성하고 변경 사항을 동일한 파일에 기록하십시오. 내가 사용하는 IP를 대체, 파일 'foo는'가지고 주어진 라인에서 각각의 IP를 찾으려면

$ cat foo 
10.153.193.0/24 via 10.153.213.1 

def swap_ip_inline(line): 
    m = re.search('some-regex', line) 
    if m: 
    for each_ip_it_matched: 
     ip2db(original_ip) 
    new_line = reconstruct_line_with_new_ip() 

    line = new_line 

    return line 

for l in foo.readlines(): 
    swap_ip_inline(l) 

do some foo to rebuild the file. 

:

나는이

의사 예 올바른 구문 아니라는 것을 알고 ip2db 함수를 실행 한 다음 변경된 행을 출력합니다.

워크 플로우 : 1. 파일 열기 2. 읽기 라인 3. 스왑 tmp 파일에 IP의 4. 저장 라인 (변경/변경되지 않은) 5. tmp 파일에 덮어 쓰기 원본 파일은

*로 편집 의사 코드 예제를 추가 여기

+1

나는 우리가 어떻게 당신을 도울 것으로 예상하는지 모르겠습니다. 당신은 어떤 코드도 제공하지 않았습니다. – HamZa

+0

참조 : [호스트 이름 또는 IP 주소와 일치하는 정규 표현식?] (http://stackoverflow.com/q/106179/1497596) – DavidRR

답변

0

:

Python - parse IPv4 addresses from string (even when censored)

간단한 수정 통과 초기 화재 시험 :

def _sub_ip(self, line): 
    pattern = r"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)([ (\[]?(\.|dot)[)\]]?(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3})" 
    ips = [each[0] for each in re.findall(pattern, line)] 
    for item in ips: 
     location = ips.index(item) 
     ip = re.sub("[()\[\]]", "", item) 
     ip = re.sub("dot", ".", ip) 
     ips.remove(item) 
     ips.insert(location, ip) 

    for ip in ips: 
     line = line.replace(ip, self._ip2db(ip)) 

    return line 

나는 도로의 아래 그것을 청소 거라고 확신하지만 좋은 시작입니다.

1

당신은 이동 :이 링크는 나에게 내가 찾던 breatkthrough했다

>>> import re 
>>> ip_addr_regex = re.compile(r'\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b') 
>>> f = open('foo') 
>>> for line in f: 
...  print(line) 
... 
10.153.193.0/24 via 10.153.213.1 

>>> f.seek(0) 
>>> 

specific_substitute = 'foo' 

>>> for line in f: 
...  re.sub(ip_addr_regex, specific_substitute, line) 
... 
'foo/24 via foo\n' 
+0

ssheth, 그건 내가 가지고있는 것과 비슷합니다. 내가 가지고있는 문제는 주어진 줄에서 IP 주소를 평가할 수 있도록 하위 노드 앞에 일치 항목을 실행해야한다는 것입니다. 주어진 IP 주소가 나타날 때마다 1 : 1로 바꾸기를 원합니다. 어떻게해야하는지 알 수 없습니다. 위의 것을 시도해 봤는데 .split() 및 re.search.groups()를 사용하여 각 줄을 분할하려고 시도했지만 정규식을 세분화하여 IP 주소를 줄 수는 없습니다. 그 주위에 공백이 없어야합니다. re.sub에 대한 대체 함수로 그룹을 호출 할 수 있다면 그렇게 될 것입니다. 의미가 있습니까? – jduncan