while read p; do
echo $p
done < file.txt
this code can read all lines in the file.txt except the last line any ideas why. Thanks
while read p; do
echo $p
done < file.txt
this code can read all lines in the file.txt except the last line any ideas why. Thanks
Well last line does not contain the newline character, as the other answers have pointed out. But the read command actually sets the
p
variable, and then instead of returning a success, returns an end of file error. So this error stops the loop from getting executed. You can still use thep
variable which contains the last line from the fileThis puts 2 conditions to be tested, as with or, only if the first fails, the second gets executed. So, when the last line will cause an end of file error in
read
, we will check if thep
is set or not. If yes, we will use that.if youre in doubt about the last
\n
in the file, you can try:grep is not picky about the line endings ;)
you can use
grep . file.txt
for skipping empty lines...cat file.txt and see if the very last line has a new line at the end of the last line or not. If it does not then
while read p ; do echo $p done < file.txt
won't echo the last line put a new-line at the end of the last line in the text file