bash while while循环删除文本文件的最后一行

时间:2013-12-03 19:07:57

标签: bash loops while-loop

当我捕捉到这个文件时,我得到6行(这是一个差异文件)

bash-3.00$ cat /tmp/voo
18633a18634
> sashabSTP
18634a18636
> sashatSTP
21545a21548
> yheebash-3.00$

然而,当我逐行阅读时,我只得到5行。

bash-3.00$ while read line ; do echo $line ; done < /tmp/voo
18633a18634
> sashaSTP
18634a18636  
> sashatSTP
21545a21548

或者

bash-3.00$ cat /tmp/voo | while read line ; do  echo $line ; done
18633a18634
> sashabSTP
18634a18636
> sashatSTP
21545a21548
bash-3.00$

我错过了来自while循环的最后一行'yhee'。

2 个答案:

答案 0 :(得分:5)

注意:

21545a21548
> yheebash-3.00$
      ^---- no line break

您的文件不会以换行符结束。

答案 1 :(得分:2)

如果您想知道为什么?this might satisfy your curiosity

如果您使用的文件最后可能会或可能不会以新行结尾,您可以这样做:

while IFS= read -r line || [ -n "$line" ]; do
  echo "$line"
done <file

或者这个:

while IFS= read -r line; do
  echo "$line"
done < <(grep "" file)

了解更多:

  1. https://stackoverflow.com/a/31397497/3744681
  2. https://stackoverflow.com/a/31398490/3744681