如何搜索包含此正则表达式模式的所有文件?

时间:2016-03-11 21:54:08

标签: regex grep pattern-matching

我正在尝试搜索项目中包含字符串“^ {”的所有文件,后跟任何内容(包括空格,制表符,换行符,代码等),然后是“self”。文本本身(必须没有任何前置“自我”,即不是“阻止自己”),最后以“}”结尾。

这就是我现在尝试过的

egrep -r (\^\{(.|\n|\t)*self\.(.|\n|\t)*\})

但这不起作用。

接受文字的例子:

`^{ 
    // some random code
    // more code
    self.textView
  }`

如果我能获得整个unix命令,我会很感激。

3 个答案:

答案 0 :(得分:0)

试试这个

^\^\{[\w\W]*\bself\b[\w\W]*\}
  

(\ bself \ b)中

意思是确切的单词(自我),而不是任何其他单词,如你所愿

答案 1 :(得分:0)

看起来你正试图匹配多条线路。根据我的理解,你不能只使用grep

您可以使用silver searcher执行此操作(-l仅列出匹配的文件名):

ag -l '\^\{[\s\S]*\bself\b[\s\S]*\}' *.txt

pcregrep也可以这样做(-l仅用于文件名,-M用于多行):

pcregrep -l -M '\^\{[\s\S]*\bself\b[\s\S]*\}' t.txt

这些正则表达式中的\b表示单词边界(空格,句点等),因此"阻止自己"不配。

答案 2 :(得分:0)

grep仅搜索各行的正则表达式。您需要awk来搜索跨越行的正则表达式,例如使用GNU awk进行多字符RS:

find . -type f -print |
xargs awk -v RS='^$' '/\^{.*[[:space:]]self\..*}/{print FILENAME}'