bash:如何检查字符串是否以'#'?开头?

时间:2015-02-14 10:07:22

标签: regex 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 #

但我无法让它发挥作用,任何想法?

4 个答案:

答案 0 :(得分:34)

不需要正则表达式,模式就足够了

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

或者,您可以使用参数扩展:

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

答案 1 :(得分:5)

使用==

使用shell glob
line='#foo'
[[ "$line" == "#"* ]] && echo "$line starts with #"
#foo starts with #

保持引用#以阻止shell尝试解释为注释非常重要。

答案 2 :(得分:2)

如果您除了接受的答案之外还想在'#'前面允许空格,则可以使用

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

与此

#Both lines
    #are comments

答案 3 :(得分:1)

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

这将使用+删除* +匹配1个或更多 *匹配0或更多,所以在你的代码中它将显示数字,即使它不以'#'开头