2015-02-14 18 views
18

W bashu muszę sprawdzić, czy ciąg zaczyna się od znaku "#". Jak mogę to zrobić?bash: jak sprawdzić, czy ciąg zaczyna się od "#"?

To jest moje zdanie -

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

chcę uruchomić ten skrypt na pliku, plik wygląda następująco -

03930 
#90329 
43929 
#39839 

i to jest mój skrypt -

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

i to jest moje oczekiwane wyjście -

#90329 starts with # 
#39839 starts with # 

Ale nie mogłem sprawić, żeby działało, każdy pomysł?

+0

Z bash wyrażeń regularnych, wszelkie cytowane fragmenty są traktowane jako zwykły tekst. –

Odpowiedz

28

Nie wyrażenie regularne potrzebne, wzór wystarczy

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

Albo można użyć interpretacji parametrów:

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

Nie jestem do końca pewien na temat '[[zasady' więcej, ale nie powinny "$ line" być chronione podwójnymi cudzysłowami, tj. '[[" $ Line "= \ # *]]'? – bitmask

+1

@bitmask: Nie. To jeden z punktów, w których należy użyć '[[. – choroba

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

To załatwi usuń * Z + + odpowiada 1 lub więcej podczas * zastępuje 0 lub więcej więc w kodzie pokaże numer, nawet jeśli nie rozpocznie się od „#”

+0

jest edycja na pytanie, możesz pomóc? – ramgorur

+0

edytowałem moją odpowiedź, pls check – eLemEnt

+2

Wystarczy wykonać: '[[$ line = ~^#]]'. –

4

Wystarczy użyć powłoki glob korzystając ==:

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

ważne jest, aby zachować # cytowany powstrzymać powłokę próbuje interpretować jako komentarz.

+1

Ach tak, dzięki za poprawienie mnie. – anubhava

+0

Ponieważ używasz '[[' '' tylko jeden znak równości '=' jest potrzebny w porównaniu. – Potherca

+0

'=' i '==' zachowują się w ten sam sposób. – anubhava

Powiązane problemy