파일에서 문자열을 검색하려고 하면 결과에 작은따옴표로 묶인 문자열이 포함되지 않습니다.
예를 들어:
grep -rn text folder/
결과에는 다음과 같은 문자열이 포함되지 않습니다.
'text'
내가 뭘 잘못하고 있는지 말해줄래?
업데이트: 방금 새 파일로 테스트했는데 작동합니다! 특정 파일(루비 파일)에서만 발생하는 것으로 보입니다. 어쩌면 인코딩과 관련이 있을까요?
답변1
문자 인코딩 문제가 있을 가능성이 높습니다. grep하려는 파일의 문자 인코딩이 시스템 기본 인코딩과 다를 수 있습니다. 오늘날 Unixy 시스템은 일반적으로 기본적으로 UTF-8을 사용합니다. UTF-8은 7비트 ASCII와 호환되지만 8비트 ASCII 확장과는 호환되지 않습니다. 미국의 일반적인 8비트 코드는 다음과 같습니다.ISO 8859-1그리고윈도우 CP-1252. 세계 다른 곳에서도 수십 개가 더 사용됩니다.
grep
모든 입력은 기본 시스템 인코딩으로 간주됩니다. grep
인코딩이 다른 파일 의 경우 iconv
다음 명령을 사용하여 변환합니다.
$ iconv -f iso8859-1 -t utf8 myfile.txt | grep something
나는 이것이 귀하의 재귀 예제에 매우 불편하다는 것을 알고 있지만 더 넓은 교훈은 이것이 문제를 해결한다면 해당 디렉토리 트리의 모든 텍스트 파일을 시스템 문자 인코딩과 호환되도록 변환해야 한다는 것입니다. Windows 텍스트 편집기 호환성이 필요한 경우 걱정하지 마십시오. 코드 편집에 중점을 둔 대부분의 Windows 텍스트 편집기는 UTF-8을 지원하지만 Windows 자체는 현재 UTF-16을 사용합니다.
또 다른 가능성은 파일이 큰 따옴표를 사용한다는 것입니다. 키보드에 입력하는 따옴표는 곧은 따옴표(ASCII 39)이지만 일부 워드 프로세싱 프로그램과 텍스트 편집기에서는 이를 둥근 따옴표로 바꿉니다.U+2019이 예에서는.
나는 문자 인코딩 문제를 조사하기 위해 파일을 탐색하는 데 이 명령을 사용하는 것을 좋아합니다.
$ od -t x1 < myfile.txt | less
다양한 "hexdump" 프로그램을 사용할 수 있지만 데이터를 리틀 엔디안 형식의 16비트 단어로 표시하는 등 쓸모 없는 작업을 수행하는 경우가 많습니다. 그러나 od
괜찮은 16진수 덤프 프로그램처럼 인쇄 가능한 텍스트 표시 열이 없기 때문에 짧은 파일에 가장 적합합니다. 나는 종종 예제를 테스트하기 쉬운 것으로 단순화하는 것부터 시작합니다.