2010-04-05 43 views

Trả lời

50

Kể từ read đọc ruộng khoảng trắng được phân định theo mặc định, một dòng chỉ chứa khoảng trắng nên kết quả trong chuỗi rỗng được gán vào biến, vì vậy bạn sẽ có thể bỏ qua dòng sản phẩm nào chỉ với:

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

(Chính xác hơn, dấu phân tách được sử dụng bởi 'đọc' được xác định bởi biến' IFS', mặc định là khoảng trống. Chỉ cần bỏ đặt 'IFS' để hoàn nguyên về khoảng trắng.) – Arkku

+0

Tất cả đều đơn giản :) – planetp

+1

thậm chí đơn giản hơn: không cần phải trích dẫn dòng, nếu bạn sử dụng bash [[syntax: '[[-z $ line]] && continue' – pihentagy

4

bash:

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

Và sử dụng done < file thay vì cat file | while, trừ khi bạn biết lý do tại sao bạn muốn sử dụng sau này.

+0

Tôi cần smth rằng sẽ làm việc trong cả hai bash và sh. Có bất kỳ giải pháp sử dụng sh/sed/tr (trong trường hợp bash không được cài đặt)? – planetp

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

cat tôi vô ích trong trường hợp này nếu bạn đang sử dụng trong khi đọc vòng lặp. Tôi không chắc chắn nếu bạn có nghĩa là bạn muốn bỏ qua các dòng trống hoặc nếu bạn muốn bỏ qua các dòng cũng chứa ít nhất một khoảng trắng.

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

thử này

while read line; 
do 

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

done < $SOURCE_FILE 
+4

Vui lòng thêm một số giải thích, không chỉ là mã. –

+0

Thông tin thêm về ký hiệu ngoặc vuông có thể được tìm thấy tại [trang hướng dẫn kiểm tra] (http://man.cx/test) – c0dem4gnetic

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