BOM을 사용하여 UTF-8 파일을 검색하는 우아한 방법?
디버깅을 위해 디렉토리에서 UTF-8 바이트 순서 마크(BOM)로 시작하는 모든 파일을 재귀적으로 검색해야 합니다.현재 솔루션은 단순한 셸 스크립트입니다.
find -type f |
while read file
do
if [ "`head -c 3 -- "$file"`" == $'\xef\xbb\xbf' ]
then
echo "found BOM in: $file"
fi
done
또는 짧고 읽을 수 없는 한 줄의 행이 필요한 경우:
find -type f|while read file;do [ "`head -c3 -- "$file"`" == $'\xef\xbb\xbf' ] && echo "found BOM in: $file";done
줄 바꿈이 포함된 파일 이름에서는 작동하지 않지만 이러한 파일은 예상할 수 없습니다.
좀 더 짧거나 우아한 해결책은 없을까?
텍스트 에디터를 위한 흥미로운 텍스트 에디터 또는 매크로가 있습니까?
이 간단한 명령어 하나로 불량 BOM을 검출할 뿐만 아니라 클리어 할 수도 있습니다. : )
find . -type f -exec sed '1s/^\xEF\xBB\xBF//' -i {} \;
'찾기'가 너무 좋아요:)
경고 위의 세 문자가 포함된 이진 파일이 수정됩니다.
BOM 파일만 표시하려면 다음 명령을 사용합니다.
grep -rl $'\xEF\xBB\xBF' .
Windows에서 이를 수행하는 가장 쉽고 좋은 방법은 다음과 같습니다.
Total Commander → 프로젝트의 root dir로 이동 → find Altfiles ( + ) → file type *.* → Find text "EF BB BF" → Find 'Hex' 확인란 선택 → search
리스트가 표시됩니다.
find . -type f -print0 | xargs -0r awk '
/^\xEF\xBB\xBF/ {print FILENAME}
{nextfile}'
위에 제시된 솔루션의 대부분은 파일의 첫 번째 줄보다 더 많은 테스트를 수행하며, 일부(Marcus의 솔루션 등)가 결과를 필터링하는 경우에도 마찬가지입니다.이 솔루션은 각 파일의 첫 번째 줄만 테스트하기 때문에 조금 더 빠릅니다.
일부 false positive를 받아들인 경우(텍스트 이외의 파일이 있는 경우 또는 드물게 파일 중간에 ZWNBSP가 있는 경우), grep를 사용할 수 있습니다.
fgrep -rl `echo -ne '\xef\xbb\xbf'` .
사용할 수 있습니다.grep
Perl을 찾아서 이렇게 제거하도록 하겠습니다.
grep -rl $'\xEF\xBB\xBF' . | xargs perl -i -pe 's{\xEF\xBB\xBF}{}'
다음과 같은 것을 사용합니다.
grep -orHbm1 "^`echo -ne '\xef\xbb\xbf'`" . | sed '/:0:/!d;s/:0:.*//'
그러면 파일의 첫 번째 바이트부터 BOM이 발생합니다.
Windows 유저의 경우는, 이것을 참조해 주세요(PHP 스크립트는,BOM
를 참조해 주세요).
이에 대한 과잉 해결 방법은 다음과 같습니다.vi
같은 이름의 도구)를 사용하여 PHP 스크립트를 검색합니다.
phptags --warn ./
다음과 같이 출력됩니다.
./invalid.php: TRAILING whitespace ("?>\n")
./invalid.php: UTF-8 BOM alone ("\xEF\xBB\xBF")
그리고 그--whitespace
모드는 이러한 문제를 자동으로 수정합니다(따라서 .discript만 다시 쓴다고 단언합니다).
JavaScript 파일만 수정하기 위해 사용하였습니다.
find . -iname *.js -type f -exec sed 's/^\xEF\xBB\xBF//' -i.bak {} \; -exec rm {}.bak \;
find -type f -print0 | xargs -0 grep -l `printf '^\xef\xbb\xbf'` | sed 's/^/found BOM in: /'
find -print0
각 파일명 사이에 null\0을 입력합니다.xargs -0
행 구분 대신 늘 구분된 인수를 예상합니다.grep -l
에 regex와 일치하는 파일을 나타냅니다.- " " "
^\xeff\xbb\xbf
이외의 UTF-8 에 제로 는, 그 것은 .OME이 아닌 UTF-8 파일에 행의 선두에 제로 폭의 공백이 있는 경우는, 그 파일과 일치하기 때문에, 완전히 올바른 것은 아닙니다.
UTF 파일을 찾는 경우 file 명령어가 작동합니다.파일의 인코딩이 무엇인지 알려줍니다.ASCII 이외의 문자가 포함되어 있는 경우는, UTF 가 표시됩니다.
file *.php | grep UTF
하지만 그것은 반복적으로 작동하지는 않을 것이다.재귀적으로 만들기 위해 몇 가지 고급 명령어를 만들 수 있지만, 저는 레벨이 떨어질 때까지 다음과 같이 각 레벨을 개별적으로 검색했습니다.
file */*.php | grep UTF
언급URL : https://stackoverflow.com/questions/204765/elegant-way-to-search-for-utf-8-files-with-bom
'programing' 카테고리의 다른 글
잘못된 조합 혼합입니다(utf8_unicode_ci,IMPLICAT) 및 (utf8_general_ci,'=' 작업에 대한 IMPLICATE) (0) | 2022.12.11 |
---|---|
MySql: 'SUM IF' 또는 'COUNT IF'가 가능합니까? (0) | 2022.12.11 |
mocha의 기본 시간 초과 변경 (0) | 2022.12.11 |
Jest에서의 ESLint 사용방법 (0) | 2022.12.01 |
Java Collections에서 Primitive 유형을 직접 저장할 수 없는 이유는 무엇입니까? (0) | 2022.12.01 |