如何在给定标记之前忽略 bash 命令的所有输出
Posted
技术标签:
【中文标题】如何在给定标记之前忽略 bash 命令的所有输出【英文标题】:How do I ignore all output of a bash command until a given marker 【发布时间】:2014-09-29 15:59:00 【问题描述】:我正在运行xcodebuild
命令:
xcodebuild -workspace MyWorkspace.xcworkspace \
-scheme "$XCODE_SCHEME_NAME" \
-archivePath $ARCHIVE_PATH \
-destination "$TEST_DESTINATION_DEVICE" \
test
这会产生大量未经测试的输出,我可以使用类似于 this answer xcodebuild | egrep -A 5 "(error|warning):"
的内容进行过滤
但是,我对 所有 的测试输出感兴趣。测试输出在这一行之后:
Test Suite 'All tests' started at 2014-09-29 14:04:54 +0000
那么有没有办法 grep 或过滤上述行之后的所有内容?最好保留错误警告过滤器,即在以下情况下显示该行:
该行包含“错误”或“警告” 或该行位于'Test Suite * started at*'
行之后
【问题讨论】:
检查Print lines in file from the match line until end of file @fedorqui - 这看起来不错,我可以将输出通过管道传输到文件然后sed
吗?
您可以直接将命令通过管道传送到sed
,正如这些好的答案所提到的。另请注意,您的某些输出可以是stderr
,在这种情况下您必须redirect it to stdin
。
【参考方案1】:
另一种选择:
xcodebuild ... | sed '1,/^Test Suite/d'
【讨论】:
【参考方案2】:使用awk
:
xcodebuild ... | awk -v print_me=0 '/^Test Suite/ print_me=1 ; print_me print ;'
最初,print_me
的值为 false,因此不会执行裸露的 print
规则。一旦看到与“Test Suite started”行匹配的行,print_me
的值将切换为 true 值,并且此后将为每一行执行 print
规则。
【讨论】:
感谢您的回答! :) 我收到很多错误,现在标记为stream error: stream error at offset 29: created by an unsupported XCDependencyGraph build
,有什么想法吗?
@Robert,这些错误与此答案无关。
请注意,不必定义print_me
。 awk 中变量的默认值为 0(或 null,或其他),因此 print_me print
可以工作。另外,print_me
单独做同样的事情,因为 awk 的默认行为是 print $0
。
我使用了显式的 print
操作来避免解释默认操作,但我错过了我可以省略-v print_me=0
。
@glennjackman - 是的,你是对的,我认为输出来自 stderr
输出。【参考方案3】:
xcodebuild ... | grep -A 999999999 "search string"
【讨论】:
【参考方案4】:使用awk
:
xcodebuild ... | awk '/^Test Suite/test=1; nexttest'
【讨论】:
以上是关于如何在给定标记之前忽略 bash 命令的所有输出的主要内容,如果未能解决你的问题,请参考以下文章
如何告诉python在将命令传递给bash时忽略一个字符(Python到bash命令SyntaxError:因为{而无效的语法)