한 줄에 해시 하나씩, 텍스트 파일에 약 2,300만 개의 해시 목록이 있습니다. hashes.txt라고 부르세요. 다른 텍스트 파일(app 40)에 해시 목록이 있는데, 다시 한 줄에 해시가 하나씩 있습니다. 이름을 culls.txt로 지정하세요.
나는 culls.txt의 패턴을 사용하여 역 grep을 수행하려고 합니다. 즉, culls 목록의 어떤 패턴과도 일치하지 않는 모든 줄을 출력하고 싶습니다.
grep -v -F -f culls.txt hashes.txt > Output.txt
무슨 일이 일어나고 있는지는 40개 정도의 목록 중 마지막 해시만 제거되고 있다는 것입니다. 이전 행의 모든 해시가 유지됩니다. 나는 매우 차단되었습니다. 제안? 그리고 그렇습니다. 값은 해시 파일에 있습니다 ;->
답변1
마지막 해시만 인식된다는 사실은 마지막 행을 제외한 모든 행에 줄 끝 문제가 있음을 나타낼 수 있습니다.
다음 파일을 사용하여 내 시스템(Ubuntu 14.04; grep(GNU grep) 2.16)에서 이를 테스트했습니다.
$ cat culls.txt
h00
h10
h20
h30
h40
$ cat culls2.txt
h00
h10
h20
h30
h40
$ cat hashes.txt
h04
h11
h13
h30
h61
h40
h41
h39
h42
$ file culls.txt hashes.txt culls2.txt
culls.txt: ASCII text
hashes.txt: ASCII text
culls2.txt: ASCII text, with CRLF line terminators
내가 얻는 출력은 culls.txt
예상한 대로입니다( 출력에서 제거됨) h30
.h40
$ grep -v -F -f culls.txt hashes.txt
h04
h11
h13
h61
h41
h39
h42
내가 얻는 출력은 culls2.txt
여러분이 보는 것과 유사합니다( h40
출력에서 제거되었지만 h30
여전히 남아 있음).
$ grep -v -F -f culls2.txt hashes.txt
h04
h11
h13
h30
h61
h41
h39
h42
의 마지막 줄에는 줄 끝이 없습니다 culls2.txt
.
마지막 줄에 CRLF 줄 종결자를 추가하면 다음과 같은 결과를 얻습니다.
$ grep -v -F -f culls3.txt hashes.txt
h04
h11
h13
h30
h61
h40
h41
h39
h42
이제 출력에서 해시가 제거되지 않습니다.
이는 CRLF 라인 종결자가 문제임을 증명합니다.