프로젝트 규칙에 대한 모든 텍스트 파일을 확인하고 나열하려면 스크립트가 필요합니다. 관례상 예를 들면 다음과 같습니다.
- UTF-8 인코딩
- 후행 공백 없음
- 파일 끝의 줄 바꿈
- ASCII가 아닌 문자는 사용할 수 없습니다.
- LF는 줄 끝을 의미합니다.
나는 바퀴를 재발명하고 싶지 않습니다. 어쩌면 이를 수행할 수 있는 도구가 있을 수도 있습니다. 혹시 좀 아시나요?
답변1
발각
UTF-8 인코딩:
file
일반적으로 인코딩을 제공합니다.파일 --brief --mime 인코딩 myfile.txt
특정 UTF-8 문자를 찾는지 여부에 따라 "us-ascii" 또는 "utf-8"일 수 있으므로 두 가지를 모두 허용해야 합니다.
다음 사항에서는 기본적으로 출력을 파이프하고 wc -l
(출력 줄 수를 계산하기 위해) 0인지 확인해야 합니다. 또는 일반적으로 무언가가 발견되면 0을 반환하고 그렇지 않으면 1을 반환해야 합니다(이 경우 요구 사항을 충족합니다).
후행 공백 없음:이게 직업인 것 같아요
grep
:grep -e '\s\+$' myfile.txt
파일 끝의 줄 바꿈
hexdump
: or의 마지막 문자가 이면xxd
개행0a
문자가 있으며 다음을 수행할 수 있습니다.xxd -ps myfile.txt | xxd -ps myfile.txt tail -n 1 |
(여기에 언급된 다른 사항과 달리, 뭔가를 찾을 것으로 기대합니다.)
ASCII가 아닌 문자는 사용할 수 없습니다.: 이는 더 제한적일 수 있다는 점을 제외하면 UTF-8 인코딩과 동일합니다.
만약 너라면진짜파일에 ASCII 문자만 있는지 확인하려면(@Anthon의 답변 참조) 다음과 같은 것을 원할 수 있습니다.
xxd -g1 myfile.txt | xxd -g1 myfile.txt | 컷 -c 10-56 | grep '[a-f89][a-f0-9]'
이는 ASCII 범위(0x00-0x7F)를 벗어난 모든 문자를 검색합니다. 하지만 그다지 우아하지는 않습니다.
LF는 줄 끝을 의미합니다.:
file
어떤 옵션도 다음과 같은 내용을 알려주지 않습니다.CRLF 줄 종결자가 있는 ASCII 텍스트
스크립트의 경우 다음을 수행할 수 있습니다.
xxd -g1 myfile.txt | xxd -g1 myfile.txt 컷 -c 10-56 |
고정
UTF-8 인코딩: 가지다
iconv (1)
. 기본적으로 "from" 인코딩(-f
), "to" 인코딩(-t
) 및 파일이 필요합니다. "to" 인코딩은utf-8
, "from" 인코딩은file
내 게시물 상단에 설명된 방법을 사용하여 얻을 수 있습니다.file_encoding="$(file--brief--mime-encoding myfile.txt)" iconv -f "$file_encoding" -t 'utf-8' myfile.txt
후행 공백 없음
sed
: 나는 POSIX 방식(즉, 스위치 없음)을 선호하지만 + 를-i
사용한다는 의미로 작동합니다 . 어느 쪽이든 정규식은 POSIX 호환 방식으로 다음과 같습니다 .printf
ex
s/\s\+$//g
printf "%%s/\\s\\+\$//g\nwq\n" | printf "%%s/\\s\\+\$//g\nwq\n" | .txt
POSIX와 호환되지 않는 메서드의 경우:
sed -i 's/\s\+$//g' myfile.txt
파일 끝의 줄 바꿈: Unix 응용 프로그램은 파일을 저장할 때 파일 끝에 누락된 개행 문자를 추가하는 경우가 많습니다. 이를 악용하려면 약간의 해킹이 필요합니다.
printf "wq\n" | ex -s myfile.txt
(실제로는 열고, 저장하고, 종료됩니다.)
ASCII가 아닌 문자는 사용할 수 없습니다.: 위의 "UTF-8 인코딩"을 참조하세요.
LF는 줄 끝을 의미합니다.: 가지다
dos2unix (1)
. 귀하의 요구 사항을 정확하게 충족해야합니다.
답변2
이 명령을 시도해야 합니다 file
. 전체 데이터 파일을 분석하지는 않지만 이미 내용에 대한 정보를 결정하는 작업을 훌륭하게 수행합니다.
somefile
첫 번째 UTF-8 문자가 끝까지 나타나지 않는 대용량 파일이 있는 경우 file somefile
UTF-8 파일로 감지되지 않습니다.