원치 않는 null 문자 (ASCII NUL, \0)가 포함 된 텍스트 파일이 있습니다. 내가 그것을 보려고 할 때 나는 일반 텍스트에 삽입 된 기호를 vi본다 ^@. 내가 어떻게 할 수있는:
파일에서 널 문자가 포함 된 행을 식별합니까?
\0및\x0에 대해 grepping을 시도했지만 작동하지 않았습니다.널 문자를 제거 하시겠습니까?
strings파일을 실행 하면 정리되었지만 이것이 최선의 방법인지 궁금합니다.
원치 않는 null 문자 (ASCII NUL, \0)가 포함 된 텍스트 파일이 있습니다. 내가 그것을 보려고 할 때 나는 일반 텍스트에 삽입 된 기호를 vi본다 ^@. 내가 어떻게 할 수있는:
파일에서 널 문자가 포함 된 행을 식별합니까? \0및 \x0에 대해 grepping을 시도했지만 작동하지 않았습니다.
널 문자를 제거 하시겠습니까? strings파일을 실행 하면 정리되었지만 이것이 최선의 방법인지 궁금합니다.
답변:
나는 사용합니다 tr:
tr < file-with-nulls -d '\000' > file-without-nulls
명령 인수 중간에 입력 리디렉션이 작동하는지 궁금하다면 작동합니다. 대부분의 쉘 인식하고 I 다룰 것입니다 / O 재 ( <, >, ...) 어디에서나 실제로 명령 줄입니다.
tr -d '\000' < file-with-nulls > file-without-nulls하기 때문에 <쉘 파이프 기능의 일부이며 없습니다 tr.
cat |합니다. 훌륭하고 깨끗한 솔루션이 내 문제를 해결했습니다.
파일에서 널 문자를 제거하려면 다음 sed 명령을 사용하십시오.
sed -i 's/\x0//g' null.txt
이 솔루션은 파일을 제자리에서 편집합니다. 파일이 아직 사용중인 경우 중요합니다. -i'ext '를 전달하면'ext '접미사가 추가 된 원본 파일의 백업이 생성됩니다.
sed -i 필요 하지만 비어있을 수 있습니다. 이러한 시스템에서는 추가 ''같이 : sed -i '' 's/\x0//g "$FILE".
tr나 보다 훨씬 빠릅니다
$ sed --version-> sed (GNU sed) 4.7를 사용하여 다음 호출을 사용하여 백업 파일을 example.csv.baksed -i.bak 's/\x0//g' example.csv
다음은 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 확장 이므로 스크립팅에 유용합니다 .