Linux -检查文件末尾是否有空行[重复]

sbdsn5lh  于 2023-03-01  发布在  Linux
关注(0)|答案(4)|浏览(108)
    • 此问题在此处已有答案**:

How to detect file ends in newline?(10个答案)
5年前关闭。

  • 注意:此问题的措辞不同,使用"with/out newline"代替"with/out 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#
    • 文件:文本行为空**
$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#

有没有一个命令或函数可以检查文件末尾是否有空行?我已经找到了这个解决方案,但它对我不起作用。(编辑:忽略:使用preg_match和PHP的解决方案也可以。)

dgtucam1

dgtucam11#

只需键入:

cat -e nameofyourfile

如果有换行符,则以$符号结束;如果没有换行符,则以%符号结束。

dgsult0t

dgsult0t2#

Olivier Pirson's answer比我最初在这里发布的更整洁(它也能正确处理空文件),我编辑了我的解决方案以匹配他的。
在bash中:

newline_at_eof()
{
    if [[ -s "$1" && -z "$(tail -c 1 "$1")" ]]
    then
        echo "Newline at end of file!"
    else
        echo "No newline at end of file!"
    fi
}

作为您可以调用的shell脚本(将其粘贴到文件chmod +x <filename>中以使其可执行):

#!/bin/bash
if [[ -s "$1" && -z "$(tail -c 1 "$1")" ]]
then
    echo "Newline at end of file!"
else
    echo "No newline at end of file!"
fi
idfiyjo8

idfiyjo83#

我找到了解here

#!/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!
b5buobof

b5buobof4#

\Z元字符表示字符串的绝对结尾。

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

这里你看到的是字符串末尾的一个新行。file_get_contents不会在末尾添加任何内容,但是它会将整个文件加载到内存中;如果您文件不是太大,也没关系,否则您必须为您的问题带来一个新的解决方案。

相关问题