作为硬件工程师或者一般linux操作时,常常会遇到这种场景:在很多文件中,找到A条件成立,并且同时B条件成立的那些文件。比如,一个双口RAM的位宽,希望找到设计文件,出现 WIDTH_A=36 同时 WIDTH_B=36的用例testcase。常用的方法就是 **grep**命令,下面结合**find**命令以及管道符 **|**进行。
find | xargs grep -l \'WIDTH_A=36\' | xargs grep -ns --color \'WIDTH_B=36\'
find命令可以向下递归,索引出所有文件的路径然后通过 管道符 | 传递给 grep,但是得带上xargs,否则grep会将路径当做文本进行搜索。通过xargs可以告诉grep,这个路径是个文本,对路径指向的文本进行搜索。而 第一个 grep -l 选项,会返回包含**WIDTH_A=36**的文件名路径,类似的,再通过 管道符 | xargs ,给第二个grep,进行搜索 **WIDTH_B=36** ,此时没有加 -l,而是返回所在行的内容,并彩色显示,带行号。总而言之,整个过程核心在于,先找到 包含A的文件,然后在这些文件中找到包含B的