grep
텍스트 처리 도구입니다. 입력은 텍스트 파일 일 것으로 예상 합니다 . 동일한가는 것 같다 tr
맥 OS에 (비록 tr
바이너리 파일을 지원하도록되어).
컴퓨터는 바이트 시퀀스로 데이터를 저장 합니다 . 텍스트는 일련의 문자입니다. 문자 인코딩 이라는 문자 를 바이트로 인코딩하는 방법에는 여러 가지가 있습니다 . 대부분의 세계에서, 특히 OSX에서 사실상 표준 문자 인코딩은 UTF-8 이며 이는 유니 코드 문자 세트에 대한 인코딩입니다 . 256 바이트 만 가능하지만 100 만 개 이상의 가능한 유니 코드 문자가 있으므로 대부분의 문자는 여러 바이트로 인코딩됩니다. UTF-8은 가변 길이 인코딩입니다. 문자에 따라 문자를 인코딩하는 데 1-4 바이트가 걸릴 수 있습니다. 일부 바이트 시퀀스는 UTF-8의 문자를 나타내지 않습니다. 따라서 유효한 UTF-8 텍스트 파일이 아닌 일련의 바이트가 있습니다.
tr
그런 바이트 시퀀스가 발생했기 때문에 불평하고 있습니다. UTF-8로 인코딩 된 텍스트 파일이 표시되지만 UTF-8이 아닌 2 진 데이터가 표시됩니다.
Microsoft Word 문서는 텍스트 파일이 아니라 워드 프로세싱 문서입니다. 워드 프로세싱 문서 형식은 텍스트뿐만 아니라 서식, 포함 된 이미지 등도 인코딩합니다. 대부분의 워드 프로세싱 형식과 마찬가지로 Word 형식은 텍스트 파일이 아닙니다.
로케일 을 변경하여 텍스트 처리 도구가 바이트에서 작동하도록 지시 할 수 있습니다 . 특히 "C"로케일을 선택하십시오. 기본적으로 "아무것도없는 것"을 의미합니다. 명령 행에서 환경 변수가있는 로케일 설정을 선택할 수 있습니다 .
export LC_CTYPE=C
tr '\r' '\n' < target-file | grep search-string
이것은 오류를 발생시키지 않지만 target-file
여전히 지정할 대부분의 검색 문자열을 포함하지 않는 이진 파일 이기 때문에 유용한 작업을 수행하지 않습니다 .
덧붙여서, tr '\r' '\n'
Mac OS 9 또는 그 이전 버전에서 텍스트 파일을 남겨 두지 않으면 매우 유용한 명령이 아닙니다. \r
(캐리지 리턴)은 Mac OS X 이전의 Mac OS에서 줄 바꿈 구분 기호였습니다. OSX 이후 줄 바꿈 구분 기호는 \n
(줄 바꿈, 유닉스 표준)이며 텍스트 파일에는 캐리지 리턴이 없습니다. Windows는 두 문자 시퀀스 CR-LF를 사용하여 줄 바꿈을 나타냅니다. tr -d '\r'
Windows 텍스트 파일을 Unix / Linux / OSX 텍스트 파일로 변환합니다.
명령 줄에서 Word 문서를 어떻게 검색 할 수 있습니까? .docx
Word 문서는 사실입니다 압축 아카이브 여러 파일에있는 주요 것들을 포함 된 XML을 .
unzip -l Position-Paper-Final-Version.docx
Mac OS X에는 zip 파일 내부를 검색 하는 zipgrep 유틸리티가 포함되어 있습니다.
zipgrep DeCSS Position-Paper-Final-Version.docx
docx 형식의 XML 파일은 대부분 하나의 거대한 행으로 구성되어 있으므로 결과를 읽을 수 없습니다. 문서의 본문에서 검색 word/document.xml
하려면 아카이브 에서 파일 을 추출하십시오 . 이 파일에는 문서 텍스트 외에도 문서 구조를 나타내는 XML 마크 업이 포함되어 있습니다. XML 마크 업을 약간 마사지하여 sed
관리 가능한 행으로 분할 할 수 있습니다.
unzip -p Position-Paper-Final-Version.docx word/document.xml |
sed -e 's/></>\n</g' |
grep DeCSS