Subversionにコミットするときにテキスト ファイルを変更できますか? Grantは、代わりにコミットをブロックすることを提案しました。
ただし、ファイルが改行で終わることを確認する方法がわかりません。ファイルが改行で終わっていることをどのように検出できますか?
Subversionにコミットするときにテキスト ファイルを変更できますか? Grantは、代わりにコミットをブロックすることを提案しました。
ただし、ファイルが改行で終わることを確認する方法がわかりません。ファイルが改行で終わっていることをどのように検出できますか?
@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
またはさらに簡単です:
#!/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'"
事前コミットスクリプトとして次のようなものを使用できます。
#!/ usr / bin / perl while(<>){ $ last = $ _; } if(!($ last =〜m / \ n $ /)){ print STDERR"ファイルは\\n!\nで終わらない"; 出口1; }
のみを使用bash
:
x=`tail -n 1 your_textfile`
if [ "$x" == "" ]; then echo "empty line"; fi
(空白を正しくコピーするように注意してください!)
@グロム:
tail は空行を返しません
くそ。私のテストファイルは ではなく で終わりまし\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 は改行文字の数をカウントします。これは、この場合に適しています。oneliner は、ファイルの末尾にある改行の有無に応じて 0 または 1 を出力します。