1

参考下面的问题,似乎 pcregrep 不会将结果缩小到第一次出现,而是尽可能地扩展。因此,例如,如果内容是:

blah blah..
blah blah..
blah abc blah
blah blah..
blah blah..
blah blah..
blah efg1 blah blah
blah blah..
blah blah..
blah efg2 blah blah
blah blah..
blah blah..

输出上升到 efg2,而我希望只到 efg1,后者是第一次出现。有什么想法可以实现这一目标吗?

如何使用 grep 跨多行查找模式?

4

1 回答 1

0

利用

pcregrep -M  '(?s)abc.*?efg' test.txt

请参阅正则表达式证明

解释

--------------------------------------------------------------------------------
  (?s)                     set flags for this block (with . matching
                           \n) (case-sensitive) (with ^ and $
                           matching normally) (matching whitespace
                           and # normally)
--------------------------------------------------------------------------------
  abc                      'abc'
--------------------------------------------------------------------------------
  .*?                      any character (0 or more times (matching
                           the least amount possible))
--------------------------------------------------------------------------------
  efg                      'efg'
于 2021-06-04T21:40:45.340 回答