grep,如果没有换行符则忽略文件的最后一行

grep, ignoring the last line of the file if it does not have a newline

grep浏览仍在由其他进程创建的文件时,最后一行通常不完整并且末尾还没有换行符。是否可以使用 grep(或 sed 之类的替代方法)忽略此行?

我不想总是自动忽略最后一行,因为当完全创建完整并附加最后的换行符时,最后一行将有效。

如果文件没有以换行符结尾,这个 perl 将删除最后一行

perl -pe 's/.*// if eof && !/\n/' file

您可以使用 tailwc 测试文件是否以换行符结尾。如果没有,请删除带有 head 的最后一行:

if [[ $(tail -c1 infile | wc -l) != 1 ]]; then 
    mv infile infile.tmp
    head -n-1 infile.tmp > infile
fi