[英]Regex (grep) Backward match
我需要一個與ERROR
之前關閉的[A-Za-z_0-9]*\\.xml
匹配的正則表達式。
以下輸入應匹配match_me.xml
ERROR
。 [A-Za-z_0-9]*\\.xml
應該匹配。 -> match_me.xml Lorem ipsum dolor坐着,consetetur sadipscing elitr,sed diam nonumy eirmod tempor invitunt ut labour et dolore magna aliquyam erat,sed diam voluptua 在vero eos et accusam et justo duo
match_not_me.xml
多洛雷斯等人
match_me.xml
Stet clita kasd gubergren,沒有大海,也沒有坐在這里。 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 etAccusam和Justo duo dolores et ea rebum。 Stet clita kasd gubergren,沒有大海,也沒有坐在這里。
您可以為此使用awk
:
awk 'p && /ERROR/{print p; p==""} /^[A-Za-z_0-9]*\.xml$/{p=$0}' file
match_me.xml
p
p
遇到ERROR
我們將打印p
並將其重置為空白。 grep ( PCRE )解決方案:
grep -Poz 'ERROR[\s\S]+?\s\K[A-Za-z_0-9]+\.xml' <(tac file) && echo
tac file
-以相反的順序連接tac file
行
[\\s\\S]+?
-以“非貪婪”方式匹配任何字符
\\K
忽略先前的比賽
輸出:
match_me.xml
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.