2012-09-19 35 views
11

Tôi đang lặp qua các dòng trong một tệp. Tôi chỉ cần bỏ qua các dòng bắt đầu bằng "#". Tôi làm như thế nào?bash loop bỏ qua dòng nhận xét

#!/bin/sh 

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

Cảm ơn bạn đã trợ giúp!

Trả lời

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

Thẳng thắn mà nói, tuy nhiên, nó thường rõ ràng hơn để chuyển sang grep:

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

Bạn cũng có thể làm điều gì đó quá thông minh với 'expr' hoặc hậu tố loại bỏ (ví dụ:' [-z "$ { line %% # *} "]'), nhưng chúng sẽ có giá trị bằng hoặc ít hơn so với tùy chọn 'case', tôi nghĩ vậy. – pilcrow

+2

Để tách các dòng trong đó khoảng trống (chỉ) đứng trước '#', sử dụng 'grep -v '^ \ s * #' mklement0

+1

Một tùy chọn khác (nếu vì lý do nào đó mà ai đó muốn tránh 'grep') có thể là' if [[$ line = ~^#]]; sau đó tiếp tục; fi'. –

Các vấn đề liên quan