我已经以不同的方式解决了我的问题而没有正则表达,但我会在这里留下这个问题,以帮助将来遇到这个问题的人.我在模式中也犯了一个错误.我要感谢anubhava.他的回答对我很有帮助.在bash中,正则表达式\ s不符合您期望的空格.如果要匹配空格或制表符,则必须使用[[:blank:]].此示例正常工作:
[[ "import scala" =~ ^import\s*.+cala$ ]] && echo "yes"
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
[[ "import scala" =~ ^import\s*scala$ ]] && echo "yes"
Run Code Online (Sandbox Code Playgroud)
这是grep手册页的一部分:
最后,某些命名的字符类在括号表达式中预定义,如下所示.他们的名字是自我解释的,他们是[:alnum:],[:alpha:],[:cntrl:],[:digit:],[:graph:],[:lower:],[:print:] ,[:punct:],[:space:],[:upper:]和[:xdigit:].例如,[[:alnum:]]表示当前语言环境中数字和字母的字符类.在C语言环境和ASCII字符集编码中,这与[0-9A-Za-z]相同.(请注意,这些类名中的括号是符号名称的一部分,除括号括起括号表达式的括号外,还必须包括它们.)大多数元字符在括号表达式中失去其特殊含义.要包含文字,请将其放在列表中的第一位.同样,要包含一个文字^将它放在任何地方,但首先.最后,要包含一个文字 - 将它放在最后.
\s不适用于bash正则表达式.[[:blank:]]而是使用匹配空格或制表符:
[[ "import scala" =~ ^import[[:blank:]].*scala$ ]] && echo "yes"
yes
Run Code Online (Sandbox Code Playgroud)
PS:然而[[:space:]]相当于\s那也匹配\n
另请注意,必须使用.*而不是.+之前scala匹配0个或更多个字符而不是1+,因为空间已经匹配使用[[:blank:]]
| 归档时间: |
|
| 查看次数: |
1244 次 |
| 最近记录: |