以下检查它是否以“End”开头:
if [[ "$line" =~ ^End ]]
我试图找出如何匹配不以“02/18/13”开头的内容。我尝试了以下方法:
if [[ "$line" != ^02/18/13 ]]
if [[ "$line" != ^02\/18\/13 ]]
他们似乎都没有工作。
以下检查它是否以“End”开头:
if [[ "$line" =~ ^End ]]
我试图找出如何匹配不以“02/18/13”开头的内容。我尝试了以下方法:
if [[ "$line" != ^02/18/13 ]]
if [[ "$line" != ^02\/18\/13 ]]
他们似乎都没有工作。
bash 没有“不匹配正则表达式”运算符;您可以否定 ( !
) 对“匹配正则表达式”运算符 ( =~
) 的测试:
if [[ ! "$line" =~ ^02/18/13 ]]
或使用“不匹配字符串/全局模式”运算符 ( !=
):
if [[ "$line" != 02/18/13* ]]
Glob 模式与正则表达式的差异足以令人困惑。在这种情况下,模式很简单,唯一的区别是 glob 应该匹配整个字符串,因此不需要锚定(实际上,它需要一个通配符来取消锚定模式的结尾)。
为什么不只是“如果不是”呢?
if ! [[ "$line" =~ ^02/18/13 ]]
使用如果!会成功的。示例:在 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 :”响应