正则表达式向后查找字符串和第一次出现的另一个字符串之间的所有
发布时间:2020-12-14 05:49:07 所属栏目:百科 来源:网络整理
导读:我需要在’error:’之前找到最近出现的’GET'(GET zzzz)并捕获其间的所有文本. GET xxxxxGET yyyyyGET zzzzzSome textmore texterror: this is an error 可以这样做吗? 编辑 谢谢,awk解决方案有效,但是通过最后出现’错误:’可以进一步改善吗? GET xxxxx
我需要在’error:’之前找到最近出现的’GET'(GET zzzz)并捕获其间的所有文本.
GET xxxxx GET yyyyy GET zzzzz Some text more text error: this is an error 可以这样做吗? 编辑 谢谢,awk解决方案有效,但是通过最后出现’错误:’可以进一步改善吗? GET xxxxx GET yyyyy GET zzzzz Some text more text error: this is the first error GET xxxxx GET yyyyy GET zzzzz Some text more text error: this is the last error 解决方法
尝试以下awk解决方案:
awk ' /^GET/ { delete lines; c=0; inBlock=1 } /^error:/ { for(i=1; i<=c; ++i) print lines[i]; print; exit } inBlock { lines[++c] = $0 } ' file 这假设必须只打印一个块,并且还应打印错误:行. (更新:请参阅下面的解决方案,仅打印最后一个块). > / ^ GET / {删除行; C = 0;每当在行的开头遇到字符串GET时,inBlock = 1}开始在可变行中构建一个行数组. 根据OP的要求更新: 要(仅)报告以错误:结尾的最后一个块,请使用以下命令: awk ' /^GET/ { delete lines; c=0; inBlock=1 } inBlock { lines[++c] = $0 } /^error:/ { inBlock=0; } END { for(i=1; i<=c; ++i) print lines[i] } ' file 这与第一个解决方案的不同之处在于后面的块只是简单地替换了之前的块,因此最后一个块“wins”,然后在Awk脚本的END块中处理完所有输入之后打印. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |