web-dev-qa-db-ja.com

Linux-ファイルの最後に空の行があるかどうかを確認します

注:この質問は、「空行あり/なし」の代わりに「改行あり/なし」を使用して、別の言い方をしていました

私は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)を使用したソリューションでも問題ありません。)

11
Black

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
13
Fred

次のように入力するだけです。

cat -e nameofyourfile

改行がある場合は、$記号で終わります。そうでない場合は、%記号で終わります。

16
Camila Masetti

私は解決策を見つけました ここ

#!/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!
3
Black

\Zメタ文字は、文字列の絶対的な終わりを意味します。

if (preg_match('#\n\Z#', file_get_contents('foo.txt'))) {
    echo 'New line found at the end';
}

したがって、ここでは、文字列の最後にある新しい行を確認しています。 file_get_contentsは最後に何も追加しません。しかし、ファイル全体をメモリにロードします。ファイルが大きすぎない場合は問題ありません。そうでない場合は、問題に新しい解決策を提示する必要があります。

1
JesusTheHun