24

Subversionにコミットするときにテキスト ファイルを変更できますか? Grantは、代わりにコミットをブロックすることを提案しました。

ただし、ファイルが改行で終わることを確認する方法がわかりません。ファイルが改行で終わっていることをどのように検出できますか?

4

10 に答える 10

20

@Konrad : tail は空の行を返しません。改行で終わらないテキストを含むファイルと、改行で終わるファイルを作成しました。テールからの出力は次のとおりです。

$ cat test_no_newline.txt
this file doesn't end in newline$ 

$ cat test_with_newline.txt
this file ends in newline
$

tail が最後のバイトオプションを取得することがわかりましたが。だから私はあなたのスクリプトを次のように修正しました:

#!/bin/sh
c=`tail -c 1 $1`
if [ "$c" != "" ]; then
    echo "no newline"
fi
于 2008-09-02T23:35:22.377 に答える
15

またはさらに簡単です:

#!/bin/sh
test "$(tail -c 1 "$1")" && echo "no newline at eof: '$1'"

しかし、より堅牢なチェックが必要な場合:

test "$(tail -c 1 "$1" | wc -l)" -eq 0 && echo "no newline at eof: '$1'"
于 2010-03-11T00:42:58.290 に答える
3

事前コミットスクリプトとして次のようなものを使用できます。

#!/ usr / bin / perl

while(<>){
    $ last = $ _;
}

if(!($ last =〜m / \ n $ /)){
    print STDERR"ファイルは\\n!\nで終わらない";
    出口1;
}
于 2008-09-02T10:12:48.310 に答える
3

のみを使用bash

x=`tail -n 1 your_textfile`
if [ "$x" == "" ]; then echo "empty line"; fi

(空白を正しくコピーするように注意してください!)

@グロム:

tail は空行を返しません

くそ。私のテストファイルは ではなく で終わりまし\n\n\n。(?)で終わらvimないファイルは作成できないようです。\nとにかく、「最後のバイトを取得」オプションが機能する限り、すべて問題ありません。

于 2008-09-02T10:30:45.507 に答える
3

私のために働いた:

tail -n 1 /path/to/newline_at_end.txt | wc --lines
# according to "man wc" : --lines - print the newline counts

したがって、 wc は改行文字の数をカウントします。これは、この場合に適しています。oneliner は、ファイルの末尾にある改行の有無に応じて 0 または 1 を出力します。

于 2012-05-02T14:05:23.160 に答える