Regex 如何搜索包含此正则表达式模式的所有文件?
我试图在我的项目中搜索所有包含字符串“^{”,后跟任何内容(包括空格、制表符、换行符、代码等),然后是“self.”文本本身(不必在“self”前面加任何内容,即不是“blockself”),最后以“}”结尾 这就是我现在所尝试的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
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}'