这个问题不是关于匹配字符串(或行)之间的多行。挑战在于我能够分别对每场比赛进行一些操作。例如,如果这是我的日志文件:
string 1
string 2
START HERE
string 4
string 5
string 6
string 7-8
END HERE
string 9
string 10
START HERE
string 6
string 3
string 9
string 1
HERE END
string 9
string 1
我从START HERE
到END HERE
或HERE END
匹配(但它始终以START HERE
开头)。例如,对于第一场比赛,我需要:
string 4
string 5
string 6
string 7
我想在第一次匹配时执行一些操作或调用一些函数(例如,string 4
的出现次数,string 7
之后的正则表达式次数等),然后才能获得第二次匹配:< / p>
string 6
string 3
string 9
string 1
然后我也将在第二场比赛中执行相同的操作(与第一场比赛分开)。
总结是我希望将每个匹配与另一个匹配。 我使用bash没有其他依赖,除了awk,sed和grep。为了得到起始行和结束行之间的界限,我用这种方式使用awk:
awk '/START HERE/,/END HERE\|HERE END /' logFile.log > matchedLines.log
基本上,这会抓住START HERE
中所有END HERE
和HERE END
或logFile.log
之间的界限,并将其存储在matchedLines.log
中。
但是我无法分别对每个匹配执行任何操作,它会将所有匹配转储到文件中。我希望能够将第一场比赛与第二场比赛和第三场比赛分开处理,等等。
答案 0 :(得分:2)
不要使用范围,分别匹配起始行和结束行,并初始化将用于处理块中其余行的变量。
{{1}}
答案 1 :(得分:0)
您可能希望将每个匹配外包到自己的文件中,如
awk '/START HERE/{match++}
/START HERE/,/END HERE|HERE END/{print>match}' logFile.log
for match in $(ls [1-9]*); do process $match; rm $match; done