2015-02-14 20 views
18

In Bash muss ich überprüfen, ob eine Zeichenfolge mit dem Zeichen "#" beginnt. Wie mache ich das?Bash: Wie überprüft man, ob ein String mit '#' beginnt?

Dieses mein nehmen ist -

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

ich dieses Skript über eine Datei ausgeführt werden soll, sieht die Datei wie folgt -

03930 
#90329 
43929 
#39839 

und das ist mein Skript -

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

und dies ist meine erwartete Ausgabe -

#90329 starts with # 
#39839 starts with # 

Aber ich konnte es nicht funktionieren lassen, keine Ahnung?

+0

Mit bash regulären Ausdrücken, werden alle angegebenen Teile als einfacher Text behandelt. –

Antwort

28

Kein regulärer Ausdruck benötigt, ein Muster genug

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

ist Oder Sie Parameter Expansion verwenden können:

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

Ich bin nicht ganz sicher über die '[[] Regeln mehr, aber sollte' $ line' nicht mit doppelten Anführungszeichen versehen sein, d. H. '[[" $ Line "= \ # *]]' '? – bitmask

+1

@bitmask: Nein. Das ist einer der Punkte, die '[[' '. – choroba

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

Dies wird den Trick entfernen tun * mit + + Spiele 1 oder mehr während * entspricht 0 oder mehr so ​​im Code wird es zeigen Nummer, auch wenn es

mit ‚#‘ beginnt nicht
+0

gibt es eine Bearbeitung der Frage, können Sie helfen? – ramgorur

+0

Ich habe meine Antwort bearbeitet pls check – eLemEnt

+2

Es ist genug zu tun: '[[$ line = ~^#]]'. –

4

verwenden Sie einfach glob-Shell ==:

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

Es ist wichtig, # zitiert zu halten Schale zu stoppen versuchen, als Kommentar zu interpretieren.

+1

Ah das ist richtig, danke für die Korrektur mich. – anubhava

+0

Da Sie '[[' 'nur ein Gleichheitszeichen '=' im Vergleich benötigt wird. – Potherca

+0

'=' und '==' verhalten sich in diesem Fall gleich. – anubhava

Verwandte Themen