UNIX에서 널 문자 식별 및 제거
원치 않는 null 문자 (ASCII NUL, \0
)가 포함 된 텍스트 파일이 있습니다. 내가 그것을 보려고 할 때 나는 일반 텍스트에 삽입 된 기호를 vi
본다 ^@
. 내가 어떻게 할 수있는:
파일에서 널 문자가 포함 된 행을 식별합니까?
\0
및\x0
에 대해 grepping을 시도했지만 작동하지 않았습니다.널 문자를 제거 하시겠습니까?
strings
파일을 실행 하면 정리되었지만 이것이 최선의 방법인지 궁금합니다.
나는 사용합니다 tr
:
tr < file-with-nulls -d '\000' > file-without-nulls
명령 인수 중간에 입력 리디렉션이 작동하는지 궁금하다면 작동합니다. 대부분의 쉘 인식하고 I 다룰 것입니다 / O 재 ( <
, >
, ...) 어디에서나 실제로 명령 줄입니다.
파일에서 널 문자를 제거하려면 다음 sed 명령을 사용하십시오.
sed -i 's/\x0//g' null.txt
이 솔루션은 파일을 제자리에서 편집합니다. 파일이 아직 사용중인 경우 중요합니다. -i'ext '를 전달하면'ext '접미사가 추가 된 원본 파일의 백업이 생성됩니다.
원치 않는 NUL 문자 (예 : 2 바이트마다 하나씩)는 파일이 UTF-16으로 인코딩되었으며 iconv
UTF-8로 변환하는 데 사용해야 함 을 나타냅니다 .
다음을 발견했는데 어떤 줄에 null 문자가 있는지 출력합니다.
perl -ne '/\000/ and print;' file-with-nulls
또한 8 진 덤프는 널이 있는지 알려줄 수 있습니다.
od file-with-nulls | grep ' 000'
파일의 행이 \ r \ n \ 000으로 끝나면 \ n \ 000을 삭제 한 다음 \ r을 \ n으로 바꾸십시오.
tr -d '\n\000' <infile | tr '\r' '\n' >outfile
다음은 ex
(in-place)를 사용하여 NULL 문자를 제거하는 방법의 예입니다 .
ex -s +"%s/\%x00//g" -cwq nulls.txt
여러 파일의 경우 :
ex -s +'bufdo!%s/\%x00//g' -cxa *.txt
재 귀성을 위해 globbing 옵션을 사용할 수 있습니다 **/*.txt
(셸에서 지원하는 경우).
sed
이 -i
매개 변수는 비표준 BSD 확장 이므로 스크립팅에 유용합니다 .
참조 : 파일이 바이너리 파일인지 확인하고 그렇지 않은 모든 파일을 읽는 방법?
나는 사용했다 :
recode UTF-16..UTF-8 <filename>
파일에서 0을 제거합니다.
다음과 같은 오류가 발생했습니다.
import codecs as cd
f=cd.open(filePath,'r','ISO-8859-1')
인코딩을 다음으로 변경하여 문제를 해결했습니다. utf-16
f=cd.open(filePath,'r','utf-16')
참고 URL : https://stackoverflow.com/questions/2398393/identifying-and-removing-null-characters-in-unix
'Programing' 카테고리의 다른 글
TypeScript : 유형 시스템 문제 (0) | 2020.09.20 |
---|---|
VSCode : Mac OSX에서 Enter 키를 사용하여 파일 탐색기에서 파일 열기 (0) | 2020.09.20 |
어셈블리 언어를 배우는 것이 가치가 있습니까? (0) | 2020.09.20 |
Text Watcher를 트리거하지 않고 EditText 텍스트를 어떻게 변경할 수 있습니까? (0) | 2020.09.20 |
Resources 폴더에있는 파일 목록 가져 오기-iOS (0) | 2020.09.20 |