Ответ 1
Не требуется регулярного выражения, достаточно шаблона
if [[ $line = \#* ]] ; then
echo "$line starts with #"
fi
Или вы можете использовать расширение параметра:
if [[ ${line:0:1} = \# ]] ; then
echo "$line starts with #"
fi
В 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 #
Но я не мог заставить его работать, любая идея?
Не требуется регулярного выражения, достаточно шаблона
if [[ $line = \#* ]] ; then
echo "$line starts with #"
fi
Или вы можете использовать расширение параметра:
if [[ ${line:0:1} = \# ]] ; then
echo "$line starts with #"
fi
Просто используйте оболочку оболочки с помощью ==
:
line='#foo'
[[ "$line" == "#"* ]] && echo "$line starts with #"
#foo starts with #
Важно оставить цитату #
, чтобы остановить интерпретацию оболочки как комментария.
while read line ;
do
if [[ $line =~ ^#+ ]]; then
echo "$line starts with #" ;
fi
done < data.in
Это сделает трюк remove * с + + соответствует 1 или более в то время как * соответствует 0 или более, поэтому в вашем коде он будет показывать номер, даже если он не начинается с '#'
Если вы дополнительно к принятому ответу хотите разрешить пробелы перед "#", вы можете использовать
if [[ $line =~ ^[[:space:]]*#.* ]]; then
echo "$line starts with #"
fi
С этим
#Both lines
#are comments