ファイルルールの確認

ファイルルールの確認

プロジェクトルールのすべてのテキストファイルを確認して一覧表示するには、スクリプトが必要です。慣例上、例えば次のようになります。

  • UTF-8エンコーディング
  • 末尾の空白なし
  • ファイルの末尾の改行
  • ASCII以外の文字は使用できません。
  • LF は行末を意味します。

私は車輪を再発明したくありません。たぶんこれを行うためのツールがあるかもしれません。ちょっと知っていますか?

ベストアンサー1

発覚

  • UTF-8エンコーディング:file通常はエンコードを提供します。

    ファイル --brief --mime エンコード myfile.txt

    特定のUTF-8文字を検索するかどうかに応じて、「us-ascii」または「utf-8」のいずれかになる可能性があるため、両方を許可する必要があります。

次の点では、デフォルトで出力をパイプしてwc -l(出力行数を計算するために)ゼロであることを確認する必要があります。あるいは、通常、何かが見つかった場合は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)。あなたの要件を正確に満たす必要があります。

おすすめ記事