2014-09-29 27 views
1

我运行一个xcodebuild命令:如何忽略bash命令的所有输出到一个给定的标记

xcodebuild -workspace MyWorkspace.xcworkspace \ 
      -scheme "$XCODE_SCHEME_NAME" \ 
      -archivePath $ARCHIVE_PATH \ 
      -destination "$TEST_DESTINATION_DEVICE" \ 
      test 

这将产生大量的未intesting输出的,我可以用类似的东西过滤到this answerxcodebuild | egrep -A 5 "(error|warning):"

但是,我对全部的测试输出感兴趣。测试输出在此行之后:

Test Suite 'All tests' started at 2014-09-29 14:04:54 +0000 

那么有没有办法在上面的行之后grep或过滤所有内容?最好,这样的错误警告过滤器被保留,即显示该行,如果:

  • 无论是行包含“错误”或“警告”
  • 或线路是'Test Suite * started at*'行之后
+1

检查[从匹配线文件打印行,直到文件结尾(http://stackoverflow.com/问题/ 3434462 /) – fedorqui 2014-09-29 16:03:13

+0

@fedorqui - 这看起来不错,我会输出到一个文件,然后'sed'呢? – Robert 2014-09-29 16:26:19

+1

你可以直接将命令传递给'sed',就像这些好的答案一样。还要注意,你的一些输出可能是'stderr',在这种情况下,你必须[将它重定向到'stdin'](http://www.cyberciti.biz/faq/redirecting-stderr-to-stdout/)。 – fedorqui 2014-09-30 08:14:31

回答

3

另一种选择:

xcodebuild ... | sed '1,/^Test Suite/d' 
1

使用awk

xcodebuild ... | awk -v print_me=0 '/^Test Suite/ { print_me=1 }; print_me { print };' 

最初,print_me有一个假值,所以裸print规则将不会被执行d。一旦找到与“测试套件启动”行相匹配的行,print_me的值将切换为真值,并且从此以后将为每行执行print规则。

+0

谢谢你的回答! :)我收到很多错误,现在标记为'流错误:错误在偏移量29:由不受支持的XCDependencyGraph构建创建',任何想法? – Robert 2014-09-29 17:30:14

+0

@Robert,这些错误与此答案无关。 – 2014-09-29 17:54:13

+0

请注意,没有必要定义'print_me'。 awk中变量的默认值是0(或者null,或者其他),所以'print_me {print}'会起作用。另外,'print_me'本身也是一样的,因为awk的默认行为是'{print $ 0}'。 – fedorqui 2014-09-29 18:38:59

1
xcodebuild ... | grep -A 999999999 "search string" 
1

使用awk

xcodebuild ... | awk '/^Test Suite/{test=1; next}test' 
相关问题