簡體   English   中英

正則表達式(grep)向后匹配

[英]Regex (grep) Backward match

我需要一個與ERROR 之前關閉的[A-Za-z_0-9]*\\.xml匹配的正則表達式。

以下輸入應匹配match_me.xml

  1. 應該確定ERROR
  2. 錯誤之前的第一個[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
  1. 當一行與我們的模式匹配時,我們將該行存儲在變量p
  2. 設置p遇到ERROR我們將打印p並將其重置為空白。

grepPCRE )解決方案:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM