2015-02-14 3 views
18

В bash Мне нужно проверить, начинается ли строка с знака '#'. Как мне это сделать?bash: как проверить, начинается ли строка с '#'?

Это мое взятие -

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

Я хочу, чтобы запустить этот скрипт в файл, файл выглядит следующим образом -

03930 
#90329 
43929 
#39839 

и это мой сценарий -

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

и это мой ожидаемый выход -

#90329 starts with # 
#39839 starts with # 

Но я не мог заставить его работать, любая идея?

+0

С Баш регулярными выражениями, любые цитируемые части рассматриваются как обычный текст. –

ответ

28

Нет регулярное выражение необходимо, шаблон достаточно

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

Или, вы можете использовать расширение параметра:

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

Я не совсем уверен в '[[' правила больше, но не должен '$ line' быть защищен от двойных кавычек, т. Е.' [["$ Line" = \ # *]] '? – bitmask

+1

@bitmask: Нет. Это один из способов использовать '[['. – choroba

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

Это будет делать трюк удалить * с + + соответствует 1 или более , а * соответствует 0 или более в вашем коде он будет показывать номер, даже если она не начинается с «#»

+0

есть редактирование на вопрос, можете ли вы помочь? – ramgorur

+0

Я отредактировал мой ответ pls check – eLemEnt

+2

Достаточно сделать: '[[$ line = ~^#]]'. –

4

Просто используйте оболочки Glob с помощью ==:

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

важно, чтобы сохранить # цитируемый остановить оболочку пытается интерпретировать как комментарий.

+1

Ах, это верно, спасибо, что исправили меня. – anubhava

+0

Поскольку вы используете '[[' только один знак равенства '=' необходим для сравнения. – Potherca

+0

'=' и '==' ведут себя одинаково в этом случае. – anubhava

Смежные вопросы