bash grep - 否定匹配

时间:2016-04-13 17:30:30

标签: regex bash regex-negation

我想在我的Python单元测试中显示标记位置,在那里我一直懒惰并且去激活测试。

但我也有条件执行不是懒惰,它们是在测试时受到性能或系统条件的驱动。那些是 skipUnless ,我想完全忽略它们。

让我们把一些输入放在一个文件中, test_so_bashregex.txt ,并附上一些评论。

!ignore this, because skipUnless means I have an acceptable conditional flag
@unittest.skipUnless(do_test, do_test_msg)
def test_conditional_function():
    xxx

!catch these 2, lazy test-passing
@unittest.skip("fb212.test_urls_security_usergroup Test_Detail.test_related fails with 302")
def sometest_function():
    xxx
@unittest.expectedFailure
def test_another_function():
    xxx

!bonus points... ignore things that are commented out
   # @unittest.expectedFailure

此外,我不能在管道中使用grep -v skipUnless,因为我真的想使用egrep -A 3 xxx *.py来提供一些上下文,如:

grep -A 3 "@unittest\." *.py

test_backend_security_meta.py:    @unittest.skip("rewrite - data can be legitimately missing")
test_backend_security_meta.py-    def test_storage(self):
test_backend_security_meta.py-        with getMultiDb() as mdb:
test_backend_security_meta.py-

我尝试了什么:

尝试@ https://www.debuggex.com/

我尝试了@unittest\.(.+)(?!(Unless\()),但这不起作用,因为它匹配前3个。

同上@unittest\.[a-zA-Z]+(?!(Unless\())

@unittest\.skip(?!(Unless\())部分工作,在2上跳过。

尽管存在除非

,所有这些都会进行部分匹配

关于bash egrep,这就是最终结果,事情看起来并没有那么好。

jluc@explore$ egrep '@unittest\..*(?!(Unless))' test_so_bashregex.txt
egrep:重复操作符操作数无效

2 个答案:

答案 0 :(得分:1)

你可以try this regex

  min.RSS <- function(data, par) {
              with(data, sum((par[1] + par[2] * x - y)^2))
  }

如果你不在乎'skip'或'expectedFailure',你可以简化它:

(?<!#\s)@unittest\.(?!skipUnless)(skip|expectedFailure).*

答案 1 :(得分:1)

这样的事情怎么样 - grep似乎有点限制性

function chkgrt(num){
    num = num.replace(',',"");
    if(num > 0){
        return true;
    }
    else
        return false;
}