echo $line
Thisisaline.
我想知道这是为什么不工作:
if [[ "$line" =~ "[a-zA-Z]+\.$" ]] ; then echo "hello"; fi
上述正则表达式没有给出输出。
echo $line
Thisisaline.
我想知道这是为什么不工作:
if [[ "$line" =~ "[a-zA-Z]+\.$" ]] ; then echo "hello"; fi
上述正则表达式没有给出输出。
某些带有bash的OS版本会为您提供输出。所以它取决于你得到你的更新。 然而,没有正则表达式可以使用通配符扩展
shopt -s extglob
case "$line" in
+([a-zA-Z]).) echo "hello";;
esac
如果不行,用正则表达式不带引号
是的+1,它是引号..它们不是必需的,除此之外,不应该在这里使用(除非你试图匹配一个引用;所以如果你想在你的模式中有一个空格,你必须转义它, \'(在\之后有一个空格...另请注意,要将整行匹配为字母,您必须添加一个前导'^'和尾部'$',否则它将匹配'123 456 abc。cat和鼠标' – 2011-05-01 07:59:16
@fred,好的,所以你应该把它作为一个答案,所以OP可以知道。:) – ghostdog74 2011-05-01 08:07:26
尝试
if [[ $line =~ [a-zA-Z]+\. ]] ; then echo hello; fi
的问题是,你是用引号...
在bash正则表达式中,不需要引号,而且,不应该使用它们(除非你试图匹配一个引号(在这种情况下你可以跳过它)\"
)...此外,如果你想在你的模式中的空间,你必须逃避它,\
(后斜线后有一个空格...
还要注意,以匹配整个行作为字母,您必须添加领先的^
和尾随$
,否则它将匹配以下行:123 456 abc. cat and mouse
您的正则表达式模式不允许使用空格吗? – 2011-05-01 02:59:23
它没有,我修改了匹配字符串。 – abc 2011-05-01 03:00:22