【发布时间】:2018-09-20 14:42:25
【问题描述】:
我想检查我的 all 字符串是否存在于文本文件中。它们可以存在于同一行或不同行。部分匹配应该没问题。像这样:
...
string1
...
string2
...
string3
...
string1 string2
...
string1 string2 string3
...
string3 string1 string2
...
string2 string3
... and so on
在上面的例子中,我们可以用正则表达式代替字符串。
例如,以下code 检查文件中是否存在任何我的字符串:
if grep -EFq "string1|string2|string3" file; then
# there is at least one match
fi
如何检查所有是否存在?由于我们只对所有匹配项的存在感兴趣,因此我们应该在所有字符串匹配后立即停止读取文件。
是否可以在不必多次调用grep 的情况下执行此操作(当输入文件很大或我们有大量字符串要匹配时,它不会缩放)或使用awk 之类的工具或python?
另外,是否有可以轻松扩展正则表达式的字符串解决方案?
【问题讨论】:
-
@IanMcGowan:这不是骗子。那篇文章讨论了在同一行同时发生的所有模式。我的兴趣是在同一行或不同行上找到它们。
-
啊,好点,我的坏。我应该加一个问号。
-
@codeforester:哇,几千,这似乎是一个重要的信息。对于如此大的数字,通过 shell 将它们作为参数传递可能会出现问题。也许可以将它们分成数百个参数的块,过滤一个文件列表并从第一次调用中获取一个过滤后的文件列表,生成一个简化的文件列表作为下一个块的第二次调用的输入,依此类推。除了将文件和模式作为参数传递之外,人们还可以传递包含这些文件和模式的文件名,只需少量修改,我的脚本就可以做到这一点,但其他脚本也可以。
-
如果它要求在没有它们的情况下进行操作,为什么会有
awk和python标签?