我问了类似的问题here,但我觉得这个问题比这更复杂,在不同的帖子中提问。
foo foo foo foo foo
Import blash blah blah
foo foo foo foo foo
blah blah blah blah
Error loading file
blah blah blah blah
blah blah blah blah
query run ends
foo foo foo foo
Import blash blah blah
foo foo foo foo foo
foo foo foo foo foo
Exception occurred
blah blah blah blah
blah blah blah blah
query run ends
Import blash blah blah
foo foo foo foo foo
foo foo foo foo foo
query run ends
在与上述类似的模式中,如果错误或异常,我想要grep所有导入和结束之间的所有内容存在于它们之间。 在这个过程中,我想排除那些 Import&结束组合,它没有任何错误或异常字符串。
导入&结束字符串不是常数,可能会有所不同。
Import blash blah blah
foo foo foo foo foo
blah blah blah blah
Error loading file
blah blah blah blah
blah blah blah blah
query run ends
Import blash blah blah
foo foo foo foo foo
foo foo foo foo foo
Exception occurred
blah blah blah blah
blah blah blah blah
query run ends
答案 0 :(得分:0)
如果您的数据不包含任何空行,您可以执行以下操作:
nl='
'; sed -n -e "/Import/,/ends/{/ends/s/\$/\\$nl/; p;}" input |
awk /Exception\|Error/ RS=
这只是预处理数据以删除Import
和ends
之间没有出现的所有行,并在记录之间添加一个空行。使用该格式的数据,awk
解决方案是微不足道的。 (我通常不会宽恕管道sed到awk,但是当每个步骤都有不同的记录分隔符时,做这种事情并不罕见)
如果您的数据可能有空行,您可以使用以下内容进行预处理和后期处理:
nl='
'; sed -n -e '/^$/s/^/BLANK LINE/' -e "/Import/,/ends/{/ends/s/\$/\\$nl/; p;}" input |
awk /Exception\|Error/ RS= | sed 's/^BLANK LINE$//'
注意,有更简洁的方法可以插入空白行。此外,这样的前/后处理有一定的脆弱性;也就是说,你需要选择一个标记(字符串" BLANK LINE")作为输入中没有出现的字符串。
答案 1 :(得分:0)
和昨天一样,还有一个条件。
sed '/^Import/!d;:A;N;/\nImport/{h;s/.*\n//;bA};/ends$/!bA;h;s/\nException//;tB;s/\nError//;tB;d;:B;x' infile
答案 2 :(得分:0)
当此块包含“错误”或“例外”时,使用awk
从“导入”打印到“结束”。
awk '/Import/,/ends/ {s = s "\n" $0}
/ends/ && s ~ /Error|Exception/ {print s; s=""}' file
示例输入的输出。
Import blash blah blah
foo foo foo foo foo
blah blah blah blah
Error loading file
blah blah blah blah
blah blah blah blah
query run ends
Import blash blah blah
foo foo foo foo foo
foo foo foo foo foo
Exception occurred
blah blah blah blah
blah blah blah blah
query run ends
答案 3 :(得分:-1)
GNU awk
解决方案(假设Import
关键字未出现在中间文字中):
awk -v RS='Import' '$0~/\<(Error|Exception)/{ printf "%s%s",RS,$0 }' file
-v RS='Import'
- 将Import
关键字视为记录分隔符输出:
Import blash blah blah
foo foo foo foo foo
blah blah blah blah
Error loading file
blah blah blah blah
blah blah blah blah
query run ends
Import blash blah blah
foo foo foo foo foo
foo foo foo foo foo
Exception occurred
blah blah blah blah
blah blah blah blah
query run ends