好的,我有一个包含多个字符串的文本文件,例如 -
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
答案 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)
我可以为您的问题考虑两种可能的解决方案:
使用多个正则表达式 - 您要查找的每个单词的正则表达式,例如:
grep -e Hello123 -e Halo123 file_to_search.txt
使用带有“或”运算符的单个正则表达式。使用Perl正则表达式,它将如下所示:
grep -P "Hello123|Halo123" file_to_search.txt
修改强> 正如您在评论中提到的,您希望使用单词列表从文件中查找并在完整目录中进行搜索。
您可以操作单词到查找文件看起来像-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/*