在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 :(得分:34)
不需要正则表达式,模式就足够了
if [[ $line = \#* ]] ; then
echo "$line starts with #"
fi
或者,您可以使用参数扩展:
if [[ ${line:0:1} = \# ]] ; then
echo "$line starts with #"
fi
答案 1 :(得分:5)
使用==
:
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或更多,所以在你的代码中它将显示数字,即使它不以'#'开头