bash:遍历文本文件行可以读取最后一行

时间:2013-05-18 18:27:01

标签: bash bash4

while read p; do
  echo $p
  done < file.txt

这段代码可以读取file.txt中的所有行,除了最后一行以外的任何想法。 感谢

3 个答案:

答案 0 :(得分:7)

如果您对文件中的最后一个\n有疑问,可以尝试:

while read p; do
echo $p
done < <(grep '' file.txt)

grep对于行结尾并不挑剔;)

您可以使用grep . file.txt跳过空行...

答案 1 :(得分:6)

最后一行不包含换行符,正如其他答案所指出的那样。但read命令实际上设置了p变量,然后返回成功,而不是返回文件结束错误。所以这个错误会阻止循环执行。您仍然可以使用包含文件

中最后一行的p变量
while read -r p || [[ -n "$p" ]]
do
echo $p
done < file.txt

这样就可以测试2个条件,就像使用or一样,只有当第一个失败时,才会执行第二个条件。因此,当最后一行导致read中的文件结束错误时,我们将检查是否设置了p。如果是,我们将使用它。

答案 2 :(得分:3)

cat file.txt并查看最后一行是否在最后一行的末尾有一个新行。 如果没有,则while read p ; do echo $p done < file.txt将不回显最后一行,在文本文件的最后一行末尾添加换行符