2014-10-15 3 views
1

중복 키워드 또는 IP 주소가있는 행을 제거하는 방법에 대한 답변을 찾고 있습니다. 예를 들어. Regex를 사용하여 중복 키워드를 기반으로 행을 제거하는 방법

169.146.25.111 1412969662.95 This is just to make it unique 
169.146.25.111 1412969662.95 This data doesn't matter 
169.146.25.111 1712515362.95 This is all different 
169.146.25.112 1412969662.95 Don't care what's here 
169.146.25.111 1315125152.95 erroneous information 

그래서 나는 그것이 IP 주소와 일치하고 해당 행을 제거하려면 행의 시작 부분에 IP 주소를 발견하면 다음, 다음 줄을 검색합니다. 이것이 제가 사용하려고 시도한 것입니다.

Find what: 
^(\S+)(.*?)$\s+(?=.*^\1).*?$ 
Replace With: 
\1\2 

내가하시기 바랍니다 정규식이에 대한 해답을 찾고

169.146.25.111 1412969662.95 This is just to make it unique 
169.146.25.112 1412969662.95 Don't care what's here 

원하는 결과. 나는 그것이 일종의 정렬이나 awk로 쉽게 할 수 있다는 것을 알고 있지만 Regex와 함께 작동 시키려면 열심히 노력해 왔고 그것은 나의 두뇌를 해치고있다.

^(\S++).*\R(?=(?>.*\R)*?\1) 

패턴 설명 : (DOTALL 옵션을 선택해야합니다) 글로벌 검색 및 빈 대체 문자열 으로, IP 주소 당신에게

+0


여기 의도가 첫 선을 유지하고 중복 라인을 제거하는 것입니다 되었습니까? 중복 된 줄을 제거하고 마지막 줄을 유지합니까? –

+0

IP 주소가 여러 개인 파일이 있는데 고유 한 IP 주소를 가진 행의 데이터 만 유지해야합니다. 그래서 라인의 나머지가 중복되지 않더라도, 중복 IP 주소를 가진 라인을 제거하고 싶습니다. – Yekim

답변

2

예 감사

^    # start of the line anchor 
(\S++)   # captures all non whitespace characters 
       # the possessive quantifier '++' forbids backtracking 
.*    # all until the newline character (dotall mode disable) 
\R    # a newline (whatever the system \r, \r\n, \n) 
(?=   # open a lookahead test 
    (?>  # open an atomic group (forbids backtracking once closed) 
     .*\R # a line (with the next newline) 
    )*?  # the atomic group may occur zero or more times 
    \1   # backreference to the capture group 
)    # close the lookahead 
+0

이것은 아름답게 작동합니다. 이제 중요한 부분은 내가 조정할 수 있고 작동하는 이유를 알아내는 것입니다. 귀하의 설명이있는 설명이 있더라도 조금 흐릿합니다. 나는 신속하고 신속한 답변을 주셔서 감사합니다. 다시 한번 감사드립니다. – Yekim

0

기반 OP의 예제 패턴과 제공된 데이터는 인접한 라인에서만 작동합니다.

및/\1\2 승 대체 0, DOTALL 옵션도 선택 해제해야합니다 Demo

+0

데모 페이지가 도움이되었습니다. 감사합니다. – Yekim

관련 문제