我在Windows上的msys中使用find和grep时遇到问题。但是,我也在Linux机器上尝试了相同的命令,它的行为相同。尽管如此,下面的语法是针对Windows的,因为命令末尾的分号前面没有反斜杠。
我正在尝试编写一个find表达式来查找* .cpp和* .h文件,并将结果传递给grep。如果我单独运行它,它会成功找到所有.cpp和.h文件:
find . -name '*.cpp' -o -name '*.h'
但是如果我添加一个像这样的exec grep表达式:
find . -name '*.cpp' -o -name '*.h' -exec grep -l 'std::deque' {} ;
它只会压缩.h文件。如果我在命令中切换.h和.cpp顺序,它只搜索.h。从本质上讲,它似乎只是grep表达式中的最后一个文件扩展名。我需要做什么才能grep .h和.cpp ??
答案 0 :(得分:0)
由于您正在使用-o
,因此您需要在其周围使用括号:
find . \( -name '*.cpp' -o -name '*.h' \) -exec grep -l 'std::deque' {} \;
答案 1 :(得分:0)
或者......你可以......
bash$> grep '/bin' `find . -name "*.pl" -o -name "*.sh"`
./a.sh:#!/bin/bash
./pop3.pl:#!/usr/bin/perl
./seek.pl:#!/usr/bin/perl -w
./move.sh:#!/bin/bash
bash$>
上面的命令greps'bin'在“ .sh”和“ .pl”文件中。它找到了它们!!