J'ai un script Shell comme celui-ci:
cat file | while read line
do
# run some commands using $line
done
Maintenant, je dois vérifier si la ligne contient un caractère non blanc ([\ n\t]), et sinon, sautez-le. Comment puis-je faire ceci?
Étant donné que read
lit les champs séparés par des espaces par défaut, une ligne contenant uniquement des espaces devrait entraîner l'affectation de la chaîne vide à la variable, vous devriez donc pouvoir ignorer les lignes vides avec simplement:
[ -z "$line" ] && continue
essaye ça
while read line;
do
if [ "$line" != "" ]; then
# Do something here
fi
done < $SOURCE_FILE
frapper:
if [[ ! $line =~ [^[:space:]] ]] ; then
continue
fi
Et utilise done < file
au lieu de cat file | while
, sauf si vous savez pourquoi vous utiliseriez ce dernier.
cat
i inutile dans ce cas si vous utilisez en boucle de lecture. Je ne sais pas si vous vouliez ignorer les lignes vides ou si vous voulez ignorer les lignes qui contiennent également au moins un espace blanc.
i=0
while read -r line
do
((i++)) # or $(echo $i+1|bc) with sh
case "$line" in
"") echo "blank line at line: $i ";;
*" "*) echo "line with blanks at $i";;
*[[:blank:]]*) echo "line with blanks at $i";;
esac
done <"file"
if ! grep -q '[^[:space:]]' ; then
continue
fi
blank=`tail -1 <file-location>`
if [ -z "$blank" ]
then
echo "end of the line is the blank line"
else
echo "their is something in last line"
fi