2010-04-05 2 views

Répondre

50

Depuis read lit champs délimités par des espaces par défaut, une ligne ne contenant que des espaces devrait aboutir à la chaîne vide étant affectée à la variable, vous devriez donc être en mesure de sauter des lignes vides avec juste:

[ -z "$line" ] && continue 
+4

(Plus précisément, le délimiteur utilisé par 'read' est déterminé par la variable' IFS', qui est par défaut un espace.Il suffit de désactiver 'IFS' pour revenir à l'utilisation des espaces.) – Arkku

+0

Tout est génial :) – planetp

+1

encore plus simple: non besoin de citer la ligne, si vous utilisez bash [[syntax: '[[-z $ ligne]] && continue' – pihentagy

4

bash:

if [[ ! $line =~ [^[:space:]] ]] ; then 
    continue 
fi 

Et utiliser done < file au lieu de cat file | while, sauf si vous savez pourquoi vous utilisez ce dernier.

+0

J'ai besoin smth qui fonctionnerait dans les deux bash et sh. Existe-t-il une solution utilisant sh/sed/tr (dans le cas où bash n'est pas installé)? – planetp

2
if ! grep -q '[^[:space:]]' ; then 
    continue 
fi 
1

cat je inutile dans ce cas si vous utilisez en boucle de lecture. Je ne suis pas sûr si vous vouliez dire que vous voulez sauter des lignes qui sont vides ou si vous voulez sauter des 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" 
7

essayer cette

while read line; 
do 

    if [ "$line" != "" ]; then 
     # Do something here 
    fi 

done < $SOURCE_FILE 
+4

Veuillez ajouter quelques explications, pas seulement du code. –

+0

Vous trouverez plus d'informations sur la notation des crochets sur [la page de manuel de test] (http://man.cx/test) – c0dem4gnetic

Questions connexes