와일드카드 grep 결과에 빈 줄이 표시되고 파일이 CRLF로 끝납니다.

와일드카드 grep 결과에 빈 줄이 표시되고 파일이 CRLF로 끝납니다.

내가 찾으려는 용어(예: )와 바로 주변 텍스트만 표시하기 위해 temperature다음을 호출합니다.grep ".\{0,5\}temperature.\{0,5\}" *

이 명령은 파일에 Unix 줄 끝이 있는 경우 올바르게 작동합니다. 그러나 Windows에서 생성된 파일(CRLF로 끝남)을 검색할 때 CRLF가 5자 이내이면 grep이 올바른 결과를 표시하는 대신 전체 줄이 공백으로 나타납니다.

-U나는 (바이너리) 플래그를 사용해 보았지만 아무 소용이 없었습니다.

제가 테스트에 사용한 파일입니다. CRLF(test_dos.txt)로 저장된 버전과 LF(test_unix.txt)로만 저장된 버전이 있습니다.

the body temperature is the variable
temperature12345678
temperature1234567
temperature123456
temperature12345
temperature1234
temperature123
temperature12
temperature1
temperature

woie temperature!! tempe oaj

호출 결과는 다음 grep -o ".\{0,5\}temperature.\{0,5\}" *과 같습니다.

test_dos.txt:body temperature is t
test_dos.txt:temperature12345
test_dos.txt:temperature12345
test_dos.txt:temperature12345
test_dos.txt:temperature12345





test_dos.txt:woie temperature!! te
test_unix.txt:body temperature is t
test_unix.txt:temperature12345
test_unix.txt:temperature12345
test_unix.txt:temperature12345
test_unix.txt:temperature12345
test_unix.txt:temperature1234
test_unix.txt:temperature123
test_unix.txt:temperature12
test_unix.txt:temperature1
test_unix.txt:temperature
test_unix.txt:woie temperature!! te

Windows/DOS 파일을 사용하여 grep이 올바른 결과를 표시하도록 하려면 어떻게 해야 합니까?

답변1

grep다른 옵션에 대한 별칭을 지정 하지 않도록 하세요 . 실험적으로 --colorGNU 옵션은 grepDOS 형식 파일의 CR 처리를 어느 정도 방해하는 것으로 보이며, 이로 인해 어떤 경우에는 설명된 출력이 발생합니다. 명령 앞에 접두사를 추가하거나 \(예: \grep) 실행 파일의 전체 경로를 지정하여(예: ) /bin/grep별칭 정의를 무시할 수 있습니다.

관련 정보