注:この質問は、「空行あり/なし」の代わりに「改行あり/なし」を使用して、別の言い方をしていました
私は2つのファイルを持っています。1つは空の行で、もう1つは次の行です。
ファイル:text_without_empty_line
$root@kali:/home#cat text_without_empty_line
This is a Testfile
This file does not contain an empty line at the end
$root@kali:/home#
ファイル:text_with_empty_line
$root@kali:/home#cat text_with_empty_line
This is a Testfile
This file does contain an empty line at the end
$root@kali:/home#
ファイルの最後に空の行があるかどうかを確認するコマンドまたは関数はありますか?私はすでに this 解決策を見つけましたが、それは私にとってはうまくいきません。 (編集:無視:preg_matchとPHP)を使用したソリューションでも問題ありません。)
Bashで:
newline_at_eof()
{
if [ -z "$(tail -c 1 "$1")" ]
then
echo "Newline at end of file!"
else
echo "No newline at end of file!"
fi
}
呼び出すことができるシェルスクリプトとして(ファイルに貼り付けて、chmod +x <filename>
実行可能にする):
#!/bin/bash
if [ -z "$(tail -c 1 "$1")" ]
then
echo "Newline at end of file!"
exit 1
else
echo "No newline at end of file!"
exit 0
fi
次のように入力するだけです。
cat -e nameofyourfile
改行がある場合は、$
記号で終わります。そうでない場合は、%
記号で終わります。
私は解決策を見つけました ここ 。
#!/bin/bash
x=`tail -n 1 "$1"`
if [ "$x" == "" ]; then
echo "Newline at end of file!"
else
echo "No Newline at end of file!"
fi
重要:スクリプトを実行して読む権利があることを確認してください。 chmod 555 script
使用法:
./script text_with_newline OUTPUT: Newline at end of file!
./script text_without_newline OUTPUT: No Newline at end of file!
\Z
メタ文字は、文字列の絶対的な終わりを意味します。
if (preg_match('#\n\Z#', file_get_contents('foo.txt'))) {
echo 'New line found at the end';
}
したがって、ここでは、文字列の最後にある新しい行を確認しています。 file_get_contents
は最後に何も追加しません。しかし、ファイル全体をメモリにロードします。ファイルが大きすぎない場合は問題ありません。そうでない場合は、問題に新しい解決策を提示する必要があります。