を超えてCan you modify text files when committing to subversion?Grant私はコミットをブロックすることを提案しました。改行でファイルの終わりを検出するには?
しかし、ファイルをチェックする方法がわからない場合は改行で終わります。ファイルが改行で終わっていることをどうやって検出できますか?
を超えてCan you modify text files when committing to subversion?Grant私はコミットをブロックすることを提案しました。改行でファイルの終わりを検出するには?
しかし、ファイルをチェックする方法がわからない場合は改行で終わります。ファイルが改行で終わっていることをどうやって検出できますか?
@Konrad:テールは空行を返しません。私は改行で終わらないテキストと、改行で終わらないファイルを作成しました。テールからの出力は次のとおりです。
最後のバイトオプションがあることがわかりましたが、
#!/bin/sh
test "$(tail -c 1 "$1")" && echo "no newline at eof: '$1'"
しかし、あなたは、より堅牢なチェックをしたい場合:
#!/bin/sh
c=`tail -c 1 $1`
if [ "$c" != "" ]; then echo "no newline"; fi
あなたはSVNプリコミットフックを介してそれを行うことができるはずです。
this exampleを参照してください。
これはどのようにファイルが終了することを検出することができます」で、実際の質問に対処しません。改行で? " –
あなたの前のコミットスクリプトとして、このようなものを使用することができます
#! /usr/bin/perl while (<>) { $last = $_; } if (! ($last =~ m/\n$/)) { print STDERR "File doesn't end with \\n!\n"; exit 1; }
使用のみbash
:
(!正しく空白をコピーするように注意してください)
@グロム:
テールは空の行を返しません。
Damn。テストファイルは\n
ではなく、\n\n
で終了しました。明らかにvim
は、\n
(?)で終わらないファイルを作成することはできません。とにかく、 "最後のバイトを取得"オプションが機能する限り、すべてがうまくいきます。
は私の仕事:
tail -n 1 /path/to/newline_at_end.txt | wc --lines
# according to "man wc" : --lines - print the newline counts
を
wcは改行chの数をカウントします私たちの場合は良いです。 onelinerは、ファイルの最後に改行の有無に応じて0または1のいずれかを表示します。ここで
は便利なbashの関数です:
function file_ends_with_newline() {
[[ $(tail -c1 "$1" | wc -l) -gt 0 ]]
}
あなたが好きそれを使用することができます:
if ! file_ends_with_newline myfile.txt
then
echo "" >> myfile.txt
fi
# continue with other stuff that assumes myfile.txt ends with a newline
これは受け入れられる回答でなければなりません。空のファイル、ヌルバイトで終わるファイル、および通常のファイルに対して正しく動作します。 'wc -l'へのパイプは魅力的ではありませんが、まさに正しいことです。ファイルの最後のバイトの改行数を数えます。それが1でなければ、ファイルは改行で終わらない。 – tripleee
+1シンプルで効果的で携帯に便利です。そして、perlではない。 :) –
私はあなたが指しているコンラッドの手がかりがないので、この答えは最適ではありません。 – oberlies
私のために働かない。 – Black