管道';d grep:对另一个grep的结果进行grep

管道';d grep:对另一个grep的结果进行grep,grep,Grep,问:如何通过管道将第一次搜索的多个结果搜索到第二个文件 例: 1)文件1 系统abc{ 系统ghi{ .... ... 2) 文件2 定义ABC_1_后缀0XF67 定义ABC_2_后缀0XF34 定义DEF_1_后缀0XF65 定义DEF_2_后缀0XF11 定义GHI_1_后缀0XF73 定义GHI_2_后缀0XF82 grep-r“^system”文件| awk'{print$2}” grep-r“#定义。*”文件2 任务:如何在第二个grep中传递第一个grep的结果(即abc、def

问:如何通过管道将第一次搜索的多个结果搜索到第二个文件

例:

1)文件1
系统abc{
系统ghi{
....
...
2) 文件2
定义ABC_1_后缀0XF67
定义ABC_2_后缀0XF34
定义DEF_1_后缀0XF65
定义DEF_2_后缀0XF11
定义GHI_1_后缀0XF73
定义GHI_2_后缀0XF82
grep-r“^system”文件| awk'{print$2}”
grep-r“#定义。*”文件2
任务:如何在第二个grep中传递第一个grep的结果(即abc、def、ghi对grep-r“^system”)。我知道pipe/xargs,但还不能理解

我确实搜索了相关主题,但没有找到解决方案。
1]
2]


提前感谢

您的意思是将第一个命令的输出传递给第二个命令本身吗

也许是这样的

first=“$(grep-r“^system”文件)”
second=“$(grep-r“#define.${first}”文件2)”
丑陋的一行:

grep -r "#define.*$(grep -r "^system" file)" file2

现在还不清楚你到底想要什么,但可能是:

$ cat file1
system abc{
system ghi{
$ cat file2
define ABC_1_SUFFIX  0XF67
define ABC_2_SUFFIX  0XF34
define DEF_1_SUFFIX  0XF65
define DEF_2_SUFFIX  0XF11
define GHI_1_SUFFIX  0XF73
define GHI_2_SUFFIX  0XF82
$ awk '/^system/ && NR==FNR { gsub("[^a-zA-Z]","",$2); 
    a[toupper($2)] = 1; next } 
    /^define/ {for(k in a) if(match($0,k)) print $3}' file1 file2
0XF67
0XF34
0XF73
0XF82

请将示例输入(无描述、无图像、无链接)和该示例输入的所需输出添加到您的问题中(无评论)。您是否希望从第一个grep中获得多行输出,并希望每个输出都匹配?感觉您想要
xargs
,但并不清楚您想做什么。@williampersell,是的。。所以第二个grep就像是在第一个grep的结果循环上进行grep。我没有在文件的grep中使用xargs,您能告诉我如何才能使用它吗同样。感谢您的提示抱歉,您想要什么还不清楚。从您显示的示例文件中,您正在寻找的解决方案似乎是
cat FILE2
@williampersell我删除了“system def{”从文件1开始。现在,结果应该是所有与abc和ghi相关的地址,省略def。一个脚本可以工作,但尝试一行代码。请让我知道。Thx编辑,@William Pursell,这就是我的意思REP-ri“#define.*grep-r'^system.{'FILE1 | awk'{print$2}”文件2不适用于上述文件谢谢,这是我想要的!感谢,如果我没有完全清楚我的问题,很抱歉,但我想你永远都有答案:)可能更容易将文件1预处理为一个模式文件以匹配并使用“grep-I-f…”
$ cat file1
system abc{
system ghi{
$ cat file2
define ABC_1_SUFFIX  0XF67
define ABC_2_SUFFIX  0XF34
define DEF_1_SUFFIX  0XF65
define DEF_2_SUFFIX  0XF11
define GHI_1_SUFFIX  0XF73
define GHI_2_SUFFIX  0XF82
$ awk '/^system/ && NR==FNR { gsub("[^a-zA-Z]","",$2); 
    a[toupper($2)] = 1; next } 
    /^define/ {for(k in a) if(match($0,k)) print $3}' file1 file2
0XF67
0XF34
0XF73
0XF82