http://stackoverflow.org.cn/front/ask/view?ask_id=14730
$ grep -Pzo "(?s)^(\s*)\N*main.*?{.*?^\1}" *.c
说明:
-P激活grep的perl-regexp(常规扩展的强大扩展)-z在行尾删除换行符,将其替换为空字符。 也就是说,grep知道行尾是哪里,但将输入看作一条大线。-o仅打印匹配。 因为我们使用-z ,整个文件就像一条大行,所以如果有一个匹配,整个文件将被打印出来; 这样做不会这样做的。
在正则表达式中:
(?s)激活PCRE_DOTALL ,这意味着. 找到任何字符或换行符\N找到除换行符之外的任何东西,即使是PCRE_DOTALL被激活.*? 找到. 在非法的模式下,就是尽快停止。
找到开始行
\1对第一组的引用( \s* )这是试图找到相同的缩进方法
没有评论:
发表评论