对第一个grep返回的每个字符串运行第二个grep
我有两个文件file1
和file2
和一个模式pattern
。对第一个grep返回的每个字符串运行第二个grep
使用上pattern
的grep在file1
和cut
,我产生一些字符串像以下:
String1
String2
String3
String4
String5
对于这些字符串,我到grep文件2。我怎样才能做到这一点?
现在,我正在手动执行此操作,但必须存在更好的方法。我可以使用for循环做这个,但是我想知道是否只是将第一个grep
和cut
的结果输送到第二个grep
可以工作。
注意: 请让我知道是否需要任何其他信息。
您可以使用process substitution与-f
选项:
grep -Ff <(grep -o 'pattern' file1) file2
简短而甜美。尼斯。 – User9102d82
啊,OP是用bash?这个问题没有提到这一点。你怎么知道?! – ghoti
@ghoti:对于许多人来说'shell'被认为与'bash'相同 – anubhava
grep
有-f
选项,这使得需要一个文件的参数,并使用该文件作为模式中的每一行。因此,您可以使用两个步骤:
$ grep pattern file1 > tmp-file
$ grep -f tmp-file file2 > output
第一步,从第一个文件中提取行并将它们存储在tmp文件中。第二步然后使用这组模式从第二个文件中提取匹配行。
你可以结合这些东西,并达到由@anubhava指出的解决方案。
请提供'file1','file2'和'pattern'的工作示例以及预期输出。 –