从文本文件中grep多个字符串

时间:2018-01-05 20:36:38

标签: bash awk grep

好的,我有一个包含多个字符串的文本文件,例如 -

Hello123
Halo123
Gracias
Thank you
...

我希望grep使用这些字符串来查找目录中其他文件中匹配字符串/关键字的行

grepped的文本文件示例 -

123-example-Halo123
321-example-Gracias-com-no
321-example-match

所以在这种情况下输出应该是

123-example-Halo123
321-example-Gracias-com-no

3 个答案:

答案 0 :(得分:5)

使用GNU grep:

public class MyClassB extends MyClassA {
    @Autowired
    private MyComponent myComponent;
}

@Configuration
public class SomeConfig {

    @Bean
    @Autowired
    public MyComponent createComponent(SpecificClass foo) {
        // SpecificClass is also injected, providing another layer of indirection
        return new MyComponent(foo);
    }
}
  

grep -f file1 file2 :从FILE获取模式,每行一个。

输出:

123-example-Halo123
321-example-Gracias-com-no

答案 1 :(得分:0)

您应该查看grep的联机帮助页,以便更好地了解grep实用程序支持的选项。但是,有很多方法可以实现您想要实现的目标。这是一种方法:

grep -e "Hello123" -e "Halo123" -e "Gracias" -e "Thank you" list_of_files_to_search

但是,由于您的搜索字符串已经在单独的文件中,您可能希望使用此方法:

grep -f patternFile list_of_files_to_search

答案 2 :(得分:0)

我可以为您的问题考虑两种可能的解决方案:

  1. 使用多个正则表达式 - 您要查找的每个单词的正则表达式,例如:

    grep -e Hello123 -e Halo123 file_to_search.txt
    
  2. 使用带有“或”运算符的单个正则表达式。使用Perl正则表达式,它将如下所示:

    grep -P "Hello123|Halo123" file_to_search.txt
    
  3. 修改 正如您在评论中提到的,您希望使用单词列表从文件中查找并在完整目录中进行搜索。

    您可以操作单词到查找文件看起来像-e标记连接:

    cat words_to_find.txt | sed 's/^/-e "/;s/$/"/' | tr '\n' ' '
    

    这将返回-e "Hello123" -e "Halo123" -e "Gracias" -e" Thank you"之类的内容,然后您可以使用grep将其传递给xargs

    cat words_to_find.txt | sed 's/^/-e "/;s/$/"/' | tr '\n' ' ' | dir_to_search/*
    

    如您所见,最后一个命令还会搜索目录中的所有文件。

    第二次编辑:正如Pesa所提到的,以下命令会以更加简单和优雅的方式执行此操作:

    grep -f words_to_find.txt dir_to_search/*