문제가 있는 grep을 해결하기 위해 파일 유형과 인코딩을 비교할 수 있는 방법이 있습니까?

문제가 있는 grep을 해결하기 위해 파일 유형과 인코딩을 비교할 수 있는 방법이 있습니까?

이 경우 생성된 .txt 파일을 사용하여 폴더가 있습니다.드래그, 복사, 붙여넣기Adobe Acrobat PDF 및 OSX의 텍스트 편집기에서. 저는 vim에서 이 파일들을 편집해왔습니다. 이제 grep을 사용하여 이 파일에서 주석을 찾습니다. 예를 들어,

grep -c "\[t\]" Herbert*

[t]는 주석이며, 디렉토리에는 이름 접두어 Herbert*(예: Herbert-02-Transformation.txt, Herbert-14-Classification.txt)가 붙은 22개의 파일이 있습니다. 문제는 grep검색 문자열이 하나의 파일()에서만 발견되는데 Herbert-03-Square.txt, 동일한 주석이 파일당 여러 번 나타나는 것입니다.

converted잘못된 파일을 열면 상태 표시줄에 표시됩니다.

"Herbert-02-Transformation.txt" [converted] 276L, 57171C

unix.stack의 게시물원본 파일의 특수 문자가 PDF에서 vim으로의 프로세스에서 살아남아 문제를 일으키는 것으로 보입니다 grep. 거친 문자를 제거하고 올바른 문자를 수동으로 삽입했습니다 :digraphs. 편집된 파일 중 일부는 grep으로 검색할 수 있지만 다른 편집된 파일은 검색할 수 없습니다. 사용해 보았는데,

:e Herbert-02-Transformation.txt
:set encoding=utf-8` 
:w

하지만 위와 같이 파일은 여전히 ​​열려 있습니다. 이제 grep작동하는 파일과 작동하지 않는 파일의 인코딩을 비교하는 방법을 알아내야 한다고 생각합니다 . 자세히 설명하는 적절한 도움말 페이지가 있습니다.파일 감지를 설정하는 방법이 문제를 피하기 위해 나는 이 문제를 조사하는데 1.5시간 이상을 소비했고 지금은 이것이 좋은 질문이라고 생각합니다...

답변1

가장 쉬운 방법은 문제 파일 중 하나에서 다음으로 몇 줄을 전달하는 것입니다 od.

head Herbert-02-Transformation.txt | od -c

또는 첫 번째 줄에 이상한 점이 없으면 특정 문자열과 그 주위의 일부 문자를 찾으십시오.

od -c Herbert-02-Transformation.txt | grep -C 5 "\["

예를 들어:

$ echo "lorem ipsum [t] dolor sit amet" > foo.txt
$ od -c foo.txt 
0000000   l   o   r   e   m       i   p   s   u   m       [   t   ]    
0000020   d   o   l   o   r       s   i   t       a   m   e   t  \n
0000037

"이상한" 문자가 표시됩니다 od.


또 다른 유용한 도구는 file파일 형식 및 기타 정보를 반환합니다.

$ file --mime foo.txt 
foo.txt: text/plain; charset=us-ascii

답변2

해당 인코딩에 속하지 않는 잘못된 문자가 포함된 알려진 인코딩의 텍스트 파일이 있는 경우 를 사용할 수 있습니다 iconv -c -f charset -t charset file. 선택되었습니다.

예를 들어 움라우트를 제거하려면 다음을 수행하십시오.

$ echo Nähkästchen | iconv -c -f us-ascii -t us-ascii
Nhkstchen

해당 문자가 의미가 있으면 검색 및 바꾸기가 더 적절할 수 있습니다. 실제로 내부에 무엇이 들어 있는지에 따라 다릅니다.

관련 정보