プロジェクトルールのすべてのテキストファイルを確認して一覧表示するには、スクリプトが必要です。慣例上、例えば次のようになります。
- 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準拠の方法で次のようになります。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ファイルとして検出されません。