BOM이 포함된 UTF-8 인코딩 파일이 있는데 BOM을 제거하고 싶습니다. 파일에서 BOM을 제거하는 Linux 명령줄 도구가 있습니까?
$ file test.xml
test.xml: XML 1.0 document, UTF-8 Unicode (with BOM) text, with very long lines
답변1
파일에 UTF-8 BOM이 포함되어 있는지 확실하지 않은 경우 (가상 GNU 구현 sed
) BOM이 있으면 삭제하고, 없으면 변경하지 않습니다.
sed '1s/^\xEF\xBB\xBF//' < orig.txt > new.txt
다음 옵션을 사용하여 기존 파일을 덮어쓸 수도 있습니다 -i
.
sed -i '1s/^\xEF\xBB\xBF//' orig.txt
BSD 버전(예: macOS)을 사용하는 경우 sed
bash가 이스케이프를 수행하도록 해야 합니다.
sed $'1s/\xef\xbb\xbf//' < orig.txt > new.txt
답변2
UTF-8에서는 BOM이 의미가 없습니다. 이는 일반적으로 Microsoft 운영 체제의 가짜 소프트웨어 버그로 인해 추가됩니다.
dos2unix
이는 제거되고 Windows 텍스트 파일의 다른 특성이 처리됩니다.
dos2unix test.xml
답변3
VIM 사용
VIM에서 파일을 엽니다.
vi text.xml
BOM 인코딩 삭제:
:set nobomb
파일을 저장하고 종료합니다.
:x
비대화형 솔루션의 경우 다음 명령줄을 사용해 보세요.
vi -c ":set nobomb" -c ":wq" text.xml
이렇게 하면 BOM이 삭제되고, 파일이 저장되고, 명령줄이 모두 종료됩니다.
답변4
이를 위해 나는 종종 vim one-liner를 사용합니다.
vim --clean -c 'se nobomb|wq' filename
vim --clean -c 'bufdo se nobomb|wqa' filename1 filename2 ...