打印文件的所有完整行

打印文件的所有完整行

如何打印文件的所有完整行?我所说的“完整”仅指以换行符结尾的那些。grep将 EOF 视为行分隔符,因此grep '^.*$' file即使文件末尾没有换行符,也会打印最后一行。

整个问题来自于解析日志文件:我们需要以某种方式确保最后一个条目已完全记录 - 即它以换行符结尾。

答案1

一个简单的方法是使用perl

perl -ne '/\n/ && print' file

如果您只想检查文件的最后一个字符是否为换行符,您可以执行以下操作:

tail -c1 file | grep -q '^$' && echo yes || echo no

但该-c选项不是 POSIX,因此它不可移植。

答案2

read(至少在 Bourne shell 中)需要以换行符结束一行:

# /bin/sh -c 'echo -e "foo\nbar\c" | while read line; do echo $line; done'
foo
#

所以你可以使用类似的东西:

#!/bin/sh
while read line
    do echo $line
done < logfile.txt

相关内容