egrep은 목록의 패턴과 일치하는 행뿐만 아니라 모든 것을 출력합니다.

egrep은 목록의 패턴과 일치하는 행뿐만 아니라 모든 것을 출력합니다.

나는 과거에 일반적으로 다음을 사용하여 egrep을 성공적으로 사용했습니다.

egrep -f list_of_patterns big_file_to_look_for_patterns > selected_patterns_from_big_file

그런데 오늘 아침에도 같은 일을 하려고 했는데 계속해서 모든 것을 출력으로 가져오고 있습니다. -> 목록을 통해 제공한 패턴뿐만 아니라 내가 찾고 있는 전체 파일도 출력됩니다.

문서는 여기에서 찾을 수 있습니다:https://filebin.net/ibovbjy68x4a8kez

패턴 목록: "allMAGs_list_85_5_list"

big_file_to_look_for_patterns: "좋은 파일"

grep과 비슷한 문제가 있는 누군가의 이전 게시물을 기반으로 tr '\r' '\n'캐리지 리턴을 제거하려고 시도했지만 도움이 되지 않았습니다...

미리 감사드립니다

답변1

첫 번째 참고 사항: egrep더 이상 사용되지 않으며 어느 시점에서 제거될 수 있으므로 grep -E대신 사용하세요. 이제 문제는 스키마 파일에 빈 줄이 포함되어 있다는 것입니다. 따라서 grep은 모든 행에서 발견된 빈 문자열을 찾으므로 모든 결과가 반환됩니다. 여기서도 같은 내용을 볼 수 있습니다.

$ seq 10 | grep "" 
1
2
3
4
5
6
7
8
9
10

파일에서 빈 줄을 제거하고 다시 시도하세요.

sed '/^$/d' allMAGs_list_85_5_list > fixed.list
grep -Ef fixed.list goodfile 

다음 명령을 사용하여 원본 목록 파일을 복구할 수도 있습니다.

sed -i '/^$/d' allMAGs_list_85_5_list

아니면 즉시 실행하세요.

grep -Ef <(sed '/^$/d' allMAGs_list_85_5_list) goodfile 

관련 정보