代码之家  ›  专栏  ›  技术社区  ›  Ciaran Archer

需要用于多行搜索的regex(grep)[重复]

  •  189
  • Ciaran Archer  · 技术社区  · 16 年前

    可能重复:
    How can I search for a multiline pattern in a file ? Use pcregrep

    我正在跑步 grep 查找任何包含单词的*.sql文件 select 后面跟着这个词 customerName 后面跟着这个词 from . 此select语句可以跨多行,并且可以包含制表符和换行符。

    我尝试了以下几种变体:

    $ grep -liIr --include="*.sql" --exclude-dir="\.svn*" --regexp="select[a-zA-Z0-
    9+\n\r]*customerName[a-zA-Z0-9+\n\r]*from"
    

    然而,这只是一个永恒的过程。有人能帮我纠正语法吗?

    3 回复  |  直到 13 年前
        1
  •  422
  •   Jason Plank Maksim Kondratyuk    14 年前

    $ grep -Pzo "(?s)^(\s*)\N*main.*?{.*?^\1}" *.c
    

    -P

    -z

    -o

    (?s) PCRE_DOTALL .

    \N

    .*?

    ^

    \1 \s*

    *.c

        2
  •  148
  •   Nanne    14 年前

    AWK

    awk '/select/,/from/' *.sql
    

    select from customername

        3
  •  7
  •   Jonathan Leffler    16 年前

    grep

    File::Find

    $/ = "\n\n";    # Paragraphs
    
    while (<>)
    {
         if ($_ =~ m/SELECT.*customerName.*FROM/mi)
         {
             printf file name
             go to next file
         }
    }