2012-07-09 2 views
2

나는 비슷한 행을 가지고 있습니다. 먼저 ... 행을 삭제하고 싶습니다. 행은http://www.filefactory.com/file/a181d18/n/...nimal_2010_.rar과 같지 않습니다.

나는 유사한 행이 ...에 도착할 때까지 행을 고려합니다. 두 번째를 삭제하고 싶습니다. 비슷한 행. 어떻게해야합니까? 그것은 선이 다른보다 한 경우에만 작동하지만텍스트에서 문자열 유형을 제거 하시겠습니까?

Find what:   ((?<=\n)|^)([^\n]{40})([^\n]*\n)(.*\n)?\2[^\n]*($|\n) 
Replace with:  \2\3\4 

:

http://rapidshare.com/files/152133956/2005_-_Candlemass.part1.rar (not delete) 
http://rapidshare.com/files/152133956/2005...emass.part1.rar --> similar (delete) 

http://www.filefactory.com/file/a181d18/n/...nimal_2010_.rar -->unique (not delete) 

http://www.shragle.com/files/9baa908b/Bvdub-The_First_Day-%2528HN031%2529-2012.rar(not delete) 
http://www.shragle.com/files/9baa908b/Bvdu...1%2529-2012.rar --> similar (delete) 

내가 메모장 ++

내가이 정규식을 사용하려고에를 나오지도 사용하고 있습니다 하지만 난 또한이 유형의 문자열을 무작위로 감지하는 정규식을 갖게됩니다. 가능하니?

+0

이것은 실제로 awk의 작업처럼 들리고 sed는 아니지만 ... –

+1

'sed'만 사용하여 임의의 순서로 차이점을 찾아내는 것은 매우 어렵습니다. 제 생각에는 이런 직업을위한 도구가 아니라'sed'도 아니고 정규 표현식도 아닙니다. – Birei

+0

어떤 도구를 사용할 수 있습니까? – user143822

답변

3

당신이 (GNU가 나오지도)에 대한이 작동 될 수 있습니다

sed ':a;$!N;/^\([^\n]*\)[^\n]*\n\1\.\.\./s/\n.*//;ta;P;D' file 

설명 :

  • :a 루프 · 지명 홀더
  • $!N는 마지막 행하지 않는 한 현재 행에 다음 행을 개행 문자를 추가합니다.
  • /^\([^\n]*\)[^\n]*\n\1\.\.\./ 거의 중복되는 줄을 찾습니다.
  • s/\n.*// 삭제 이전 행.
  • ta 지난 대체 패턴 공간에서 진정한 고토 a
  • P 인쇄 첫 번째 줄이 있다면.
  • D
  • 는 두둑 공간에서 첫 번째 줄을

임의의 명령 문자열과 일치 AWK로 전환하려면 (하지 않는 한 빈 다음 줄을하지 않음) 삭제합니다.

awk '/\.\.\./{o=$0;sub(/\.\.\..*/,"");a[o]=$0;next}{b[$0]}END{for(x in a){for(y in b){if(y ~ a[x]){delete a[x]}}}for(x in a)print x;for(x in b)print x}' file 
+0

이전 줄을 지우려면's/\ n. * //'라고 말하지만 비슷한 줄이 흩어져 있다면? (하나씩). 이 정규식은 Windows 용 Sed에서 작동합니까? – user143822

+0

+1. 이것은 제공된 예제에 대한 좋은 해결책이지만 임의의 순서로 문자열에 대해 작동하지는 않습니다 (질문에서 묻습니다). – Birei

2

나는 아직 Cygwin을 설치하지 않았 으면 sort -u을 실행하는 것이 좋습니다. 이렇게하면 입력을 정렬 한 다음 반복되는 줄을 제거합니다. 하지만 순서가 중요하지 않은 경우에만 작동합니다.

관련 문제