Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何搜索包含此正则表达式模式的所有文件?_Regex_Grep_Pattern Matching - Fatal编程技术网

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

Regex 如何搜索包含此正则表达式模式的所有文件?,regex,grep,pattern-matching,Regex,Grep,Pattern Matching,我试图在我的项目中搜索所有包含字符串“^{”,后跟任何内容(包括空格、制表符、换行符、代码等),然后是“self.”文本本身(不必在“self”前面加任何内容,即不是“blockself”),最后以“}”结尾 这就是我现在所尝试的 egrep-r(\^\{(.\n\t)*self\.(.\n\t)*\}) 但这不起作用 接受文本的示例: `^{ // some random code // more code self.textView }` 如果我能使用整个un

我试图在我的项目中搜索所有包含字符串“^{”,后跟任何内容(包括空格、制表符、换行符、代码等),然后是“self.”文本本身(不必在“self”前面加任何内容,即不是“blockself”),最后以“}”结尾

这就是我现在所尝试的

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

但这不起作用

接受文本的示例:

`^{ 
    // some random code
    // more code
    self.textView
  }`
如果我能使用整个unix命令来执行此操作,我将不胜感激。

试试这个

^\^\{[\w\W]*\bself\b[\w\W]*\}
(\b自身\b)


仅表示确切的单词(self)而不是您想要的任何其他单词

看起来您正在尝试多行匹配。根据我的理解,您不能仅使用
grep
来实现这一点

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

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


这些正则表达式中的
\b
表示单词边界(空格、句点等),因此“blockself”将不匹配。

grep
仅在单个行上搜索regexp。您需要
awk
来搜索跨行的regexp,例如使用GNU awk搜索多字符:

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

“自我”没有任何预兆?你能稍微解释一下吗?就像不允许有东西
blockself.textview
,但这是允许的
self.textview
(允许在“self”前面加空格/制表符)。在这种情况下,你只需要在
self
前面加
\b
来检查单词边界。你的正则表达式变成了
(\^\{(.\n |\t)*\bself\(.\n |\t)*\})
。你能引用章节“你不能用grep做(多行匹配)”吗?
pcregrep -l -M '\^\{[\s\S]*\bself\b[\s\S]*\}' t.txt
find . -type f -print |
xargs awk -v RS='^$' '/\^{.*[[:space:]]self\..*}/{print FILENAME}'