对第一个grep返回的每个字符串运行第二个grep

问题描述:

我有两个文件file1file2和一个模式pattern对第一个grep返回的每个字符串运行第二个grep

使用上pattern的grep在file1cut,我产生一些字符串像以下:

String1 
String2 
String3 
String4 
String5 

对于这些字符串,我到grep文件2。我怎样才能做到这一点?

现在,我正在手动执行此操作,但必须存在更好的方法。我可以使用for循环做这个,但是我想知道是否只是将第一个grepcut的结果输送到第二个grep可以工作。

注意: 请让我知道是否需要任何其他信息。

+0

请提供'file1','file2'和'pattern'的工作示例以及预期输出。 –

您可以使用process substitution-f选项:

grep -Ff <(grep -o 'pattern' file1) file2 
+1

简短而甜美。尼斯。 – User9102d82

+0

啊,OP是用bash?这个问题没有提到这一点。你怎么知道?! – ghoti

+0

@ghoti:对于许多人来说'shell'被认为与'bash'相同 – anubhava

grep-f选项,这使得需要一个文件的参数,并使用该文件作为模式中的每一行。因此,您可以使用两个步骤:

$ grep pattern file1 > tmp-file 
$ grep -f tmp-file file2 > output 

第一步,从第一个文件中提取行并将它们存储在tmp文件中。第二步然后使用这组模式从第二个文件中提取匹配行。

你可以结合这些东西,并达到由@anubhava指出的解决方案。