我正在尝试搜索项目中包含字符串“^ {”的所有文件,后跟任何内容(包括空格,制表符,换行符,代码等),然后是“self”。文本本身(必须没有任何前置“自我”,即不是“阻止自己”),最后以“}”结尾。
这就是我现在尝试过的
egrep -r (\^\{(.|\n|\t)*self\.(.|\n|\t)*\})
但这不起作用。
接受文字的例子:
`^{
// some random code
// more code
self.textView
}`
如果我能获得整个unix命令,我会很感激。
答案 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}'