我需要一个与之前关联的[A-Za-z_0-9]*\.xml
匹配的正则表达式 ERROR
。
以下输入应与 match_me.xml
匹配ERROR
应该确定。[A-Za-z_0-9]*\.xml
。 - >的 match_me.xml Lorem ipsum dolor sit amet,consetetur sadipscing elitr,sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,sed diam voluptua。在vero eos et accusam et justo duo
match_not_me.xml
dolores et ea rebum。
match_me.xml
Stet clita kasd gubergren,no sea takimata sanctus est Lorem ipsum dolor sit amet。 Lorem ipsum dolor sit amet,consetetur sadipscing elitr,sed diam nonumy eirmod tempor invidunt ut labore et dolore magna
错误
aliquyam erat,sed diam voluptua。在vero eos et accusam et justo duo dolores et ea rebum。 Stet clita kasd gubergren,no sea takimata sanctus est Lorem ipsum dolor sit amet。
答案 0 :(得分:1)
您可以使用awk
:
awk 'p && /ERROR/{print p; p==""} /^[A-Za-z_0-9]*\.xml$/{p=$0}' file
match_me.xml
p
p
后我们遇到ERROR
,我们会打印p
并将其重置为空白。答案 1 :(得分:1)
grep ( PCRE )解决方案:
grep -Poz 'ERROR[\s\S]+?\s\K[A-Za-z_0-9]+\.xml' <(tac file) && echo
tac file
- 以相反的顺序连接文件的行
[\s\S]+?
- 以“非贪婪”的方式匹配任何字符
\K
- 忽略上一场比赛
输出:
match_me.xml