【发布时间】:2022-01-07 11:26:31
【问题描述】:
我想在具有相同扩展名的多个文件中匹配/检查多个模式pattern1、pattern2...文件,它返回false。
示例:
file1.ext
this file has pattern1
with many other lines
file2.ext
this file has pattern2
with many other lines
在这种情况下,由于 pattern1 和 pattern2 都存在(尽管在不同的文件中),它应该返回 true。也就是说,所有模式都必须存在于文件中。
我们可以做到这一点的一种方法是使用 grep 在所有文件中单独搜索每个模式,并检查每个 grep 是否返回至少 1 个匹配项。grep -R 'pattern1' --include="*.ext"grep -R 'pattern2' --include="*.ext"
...
但这会很昂贵,因为可能需要搜索大量文件和多种模式。
另一种方法是grep 为所有带有| 的模式并解析输出以检查是否找到了所有模式。grep -oR 'pattern1\|pattern2' --include="*.ext"
输出:
file2.ext:pattern2
file1.ext:pattern1
PS:在文件中搜索模式是我正在编写的 python 脚本的要求之一。
编辑:关于这里模式的含义的一些上下文。
模式是一个字符串。它可能包含特殊字符。
即使pattern 是一行中的子字符串,也应该发生匹配。更好的模式示例:
文件:
move-result-object v0
invoke-virtual {v0, v2}, Landroid/content/Intent;->hasExtra(Ljava/lang/String;)Z
move-result v3
const/4 v4, 0x0
if-nez v3, :cond_0
图案:
Landroid/content/Intent;->hasExtra
【问题讨论】:
-
很抱歉给您带来了困惑。这是第二个,即所有模式都必须存在于文件中。编辑了帖子。
-
我更新了我的答案。我看到您在其中一个答案 (stackoverflow.com/questions/70174585/…) 下的评论中要求提供其他功能。请将您的所有要求放在您的问题中,不要在 cmets 中添加任何无法格式化和可能遗漏的内容。