Подтвердить что ты не робот

Bash: как проверить, начинается ли строка с '#'?

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

Это мой прием -

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

Я хочу запустить этот script по файлу, файл выглядит так:

03930
#90329
43929
#39839

и это мой script -

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

и это мой ожидаемый результат -

#90329 starts with #
#39839 starts with #

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

Если вы дополнительно к принятому ответу хотите разрешить пробелы перед "#", вы можете использовать

if [[ $line =~ ^[[:space:]]*#.* ]]; then
    echo "$line starts with #"
fi

С этим

#Both lines
    #are comments