2015-02-14 16 views
18

Trong bash tôi cần kiểm tra xem chuỗi có bắt đầu bằng dấu '#' hay không. Làm thế nào để làm điều đó?bash: cách kiểm tra xem chuỗi có bắt đầu bằng '#' không?

Đây là quan điểm của tôi -

if [[ $line =~ '#*' ]]; then 
    echo "$line starts with #" ; 
fi 

Tôi muốn chạy script này trên một tập tin, các tập tin trông như thế này -

03930 
#90329 
43929 
#39839 

và đây là kịch bản của tôi -

while read line ; do 
    if [[ $line =~ '#*' ]]; then 
     echo "$line starts with #" ; 
    fi 
done < data.in 

và đây là kết quả mong đợi của tôi -

#90329 starts with # 
#39839 starts with # 

Nhưng tôi không thể làm cho nó hoạt động, ý tưởng nào?

+0

Với biểu thức thông thường bash, bất kỳ phần trích dẫn được coi là văn bản đơn giản. –

Trả lời

28

Không biểu hiện thường xuyên cần thiết, một mẫu là đủ

if [[ $line = \#* ]] ; then 
    echo "$line starts with #" 
fi 

Hoặc, bạn có thể sử dụng mở rộng tham số:

if [[ ${line:0:1} = \# ]] ; then 
    echo "$line starts with #" 
fi 
+0

Tôi không hoàn toàn chắc chắn về các quy tắc '[[' nữa, nhưng không nên '$ line' được bảo vệ kép, tức là' [["$ line" = \ # *]] '? – bitmask

+1

@bitmask: Không. Đó là một trong những điểm để sử dụng '[['. – choroba

1
while read line ; 
do 
    if [[ $line =~ ^#+ ]]; then 
     echo "$line starts with #" ; 
    fi 
done < data.in 

này sẽ làm remove lừa * với + + phù hợp với 1 hoặc nhiều khi * phù hợp với 0 hoặc nhiều hơn như vậy trong mã của bạn, nó sẽ hiển thị số thậm chí nếu nó không bắt đầu bằng '#'

+0

có chỉnh sửa cho câu hỏi, bạn có thể trợ giúp không? – ramgorur

+0

tôi đã chỉnh sửa câu trả lời của tôi xin kiểm tra – eLemEnt

+2

Nó đủ để làm: '[[$ line = ~^#]]'. –

4

Chỉ cần sử dụng glob vỏ bằng ==:

line='#foo' 
[[ "$line" == "#"* ]] && echo "$line starts with #" 
#foo starts with # 

Điều quan trọng là để giữ # trích dẫn để ngăn chặn vỏ cố gắng để giải thích như nhận xét.

+1

Ah đúng vậy, cảm ơn vì đã sửa tôi. – anubhava

+0

Vì bạn đang sử dụng '[[' chỉ một dấu bằng '=' là cần thiết trong so sánh. – Potherca

+0

'=' và '==' hoạt động tương tự trong trường hợp này. – anubhava

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