파일 규칙 확인

파일 규칙 확인

프로젝트 규칙에 대한 모든 텍스트 파일을 확인하고 나열하려면 스크립트가 필요합니다. 관례상 예를 들면 다음과 같습니다.

  • 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 호환 방식으로 다음과 같습니다 .printfexs/\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 somefileUTF-8 파일로 감지되지 않습니다.

관련 정보