10

以下检查它是否以“End”开头:

if [[ "$line" =~ ^End ]]

我试图找出如何匹配不以“02/18/13”开头的内容。我尝试了以下方法:

if [[ "$line" != ^02/18/13 ]]

if [[ "$line" != ^02\/18\/13 ]]

他们似乎都没有工作。

4

3 回答 3

22

bash 没有“不匹配正则表达式”运算符;您可以否定 ( !) 对“匹配正则表达式”运算符 ( =~) 的测试:

if [[ ! "$line" =~ ^02/18/13 ]]

或使用“不匹配字符串/全局模式”运算符 ( !=):

if [[ "$line" != 02/18/13* ]]

Glob 模式与正则表达式的差异足以令人困惑。在这种情况下,模式很简单,唯一的区别是 glob 应该匹配整个字符串,因此不需要锚定(实际上,它需要一个通配符来取消锚定模式的结尾)。

于 2013-05-16T05:55:16.190 回答
5

为什么不只是“如果不是”呢?

if ! [[ "$line" =~ ^02/18/13 ]]
于 2013-05-16T03:50:58.953 回答
1

使用如果!会成功的。示例:在 bash 中使用此测试说 line="1234" -

if ! echo "$line" |grep -q "^:" > /dev/null; then echo "GOOD line does NOT begin with : "; else echo "BAD - line DOES begin with : "; fi

它将以“GOOD line does not begin with :”响应

于 2017-11-01T08:37:02.763 回答