grep을 사용할 때 ''에 포함된 문자열은 무시됩니다.

grep을 사용할 때 ''에 포함된 문자열은 무시됩니다.

파일에서 문자열을 검색하려고 하면 결과에 작은따옴표로 묶인 문자열이 포함되지 않습니다.

예를 들어:

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진수 덤프 프로그램처럼 인쇄 가능한 텍스트 표시 열이 없기 때문에 짧은 파일에 가장 적합합니다. 나는 종종 예제를 테스트하기 쉬운 것으로 단순화하는 것부터 시작합니다.

관련 정보