Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

bash: read line and keep spaces

Tags:

bash

space

I am trying to read lines from a file containing multiple lines. I want to identify lines that contain only spaces. By definition, an empty line is empty and does not contain anything (including spaces). I want to detect lines that seems to be empty but they are not (lines that contain spaces only)

    while read line; do
        if [[ `echo "$line" | wc -w` == 0 && `echo "$line" | wc -c` > 1 ]];
        then
             echo "Fake empty line detected"
        fi
    done < "$1"

But because read ignores spaces in the start and in the end of a string my code isn't working.

an example of a file

hi
 hi
(empty line, no spaces or any other char)
hi
  (two spaces)
hey

Please help me to fix the code

like image 702
Khaleal Avatar asked Feb 14 '23 07:02

Khaleal


1 Answers

Disable word splitting by clearing the value of IFS (the internal field separator):

while IFS= read -r line; do
....
done < "$1"

The -r isn't strictly necessary, but it is good practice.


Also, a simpler way to check the value of line (I assume you're looking for a line with nothing but whitespace):

if [[ $line =~ ^$ ]]; then
    echo "Fake empty line detected"
fi
like image 159
chepner Avatar answered Feb 24 '23 07:02

chepner