2012-09-19 23 views
11

Sto eseguendo il loop su righe in un file. Devo solo saltare le righe che iniziano con "#". Come faccio?ciclo bash salta righe commentate

#!/bin/sh 

while read line; do 
    if ["$line doesn't start with #"];then 
    echo "line"; 
    fi 
done < /tmp/myfile 

Grazie per qualsiasi aiuto!

risposta

15
while read line; do 
    case "$line" in \#*) continue ;; esac 
    ... 
done < /tmp/my/input 

Francamente, però, è spesso più chiaro a rivolgersi a grep:

grep -v '^#' < /tmp/myfile | { while read line; ...; done; } 
+0

Si potrebbe anche fare qualcosa di troppo intelligente con 'expr' o suffisso rimozione (ad esempio,' [-z "$ { line %% # *} "]'), ma questi sarebbero ugualmente o meno leggibili rispetto all'opzione "case", credo. – pilcrow

+2

Per eliminare anche le righe in cui lo spazio bianco (solo) precede '#', utilizzare 'grep -v '^ \ s * #' mklement0

+1

Un'altra opzione (se per qualche ragione qualcuno volesse evitare 'grep') potrebbe essere' if [[$ line = ~^#]]; poi continua; fi'. –

Problemi correlati