2012-09-19 8 views
11

पर टिप्पणी की है, मैं एक फाइल में लाइनों पर लूप कर रहा हूं। मुझे बस "#" से शुरू होने वाली लाइनों को छोड़ना होगा। मैं यह कैसे कर सकता हूं?बैश लूप स्किप ने

#!/bin/sh 

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

किसी भी मदद के लिए धन्यवाद!

उत्तर

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

सच कहूं, तथापि, यह अक्सर साफ grep को चालू करने के लिए है:

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

तुम भी कुछ 'expr' या प्रत्यय हटाने (जैसे,' [$ {-z "के साथ बहुत चालाक कर सकता है लाइन %% # *} "]'), लेकिन मुझे लगता है कि 'केस' विकल्प की तुलना में ये समान या कम पठनीय होंगे। – pilcrow

+2

लाइनों को भी पट्टी करने के लिए जहां व्हाइटस्पेस (केवल) '#' से पहले है, इसके बजाय 'grep -v'^\ s * # ' mklement0

+1

एक और विकल्प (यदि किसी कारण से कोई व्यक्ति 'grep' से बचना चाहता था) हो सकता है' अगर [[$ line = ~^#]]; फिर जारी रखें; fi'। –

संबंधित मुद्दे