如何打印文件的所有完整行?我所说的“完整”仅指以换行符结尾的那些。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