The are many ways to parse text with bash. What if I don’t want to use a function? Is there another way?
#!/usr/bin/env bash # cookbook filename: parseViaRead # # parse ls -l with a read statement # an example of output from ls -l follows: # -rw-r--r-- 1 albing users 126 2006-10-10 22:50 fnsize ls -l "$1" | { read PERMS LCOUNT OWNER GROUP SIZE CRDATE CRTIME FILE ; echo $FILE has $LCOUNT 'link(s)' and is $SIZE bytes long. ; }
Here we let read
do all the
parsing. It will break apart the input into words,
where words are separated by whitespace, and assign each word to the
variables named on the read
command.
Actually, you can even change the separator, by setting the
bash variable $IFS
(which means Internal Field Separator) to whatever character you want for parsing; just remember
to set it back!
As you can see from the sample output of ls -l
, we have tried to choose names that get
at the meaning of each word in that output. Since FILE
is the last word, any extra fields will
also be part of that variable. That way if the name has whitespace in it
like “Beethoven Fifth Symphony” then all three words will end up in
$FILE
.
18.227.46.227