while read p; do
echo $p
done < file.txt
this code can read all lines in the file.txt except the last line any
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
if youre in doubt about the last \n
in the file, you can try:
while read p; do
echo $p
done < <(grep '' file.txt)
grep is not picky about the line endings ;)
you can use grep . file.txt
for skipping empty lines...
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 the p
variable which contains the last line from the file
while read -r p || [[ -n "$p" ]]
do
echo $p
done < file.txt
This 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 the p
is set or not. If yes, we will use that.