如何对目录中的所有文件执行grep操作

时间:2013-03-08 04:51:50

标签: linux shell grep

使用xenserver,我想对目录中的每个文件执行命令,从命令输出中删除一些内容并将其附加到文件中。

我清楚我想要使用的命令以及如何根据需要输出字符串。

但是我不清楚的是我如何让它在每个文件上执行此命令,转到下一个文件,直到找不到更多文件。

5 个答案:

答案 0 :(得分:181)

grep $PATTERN *就足够了。默认情况下,grep会跳过所有子目录。但是,如果您想要通过它们,grep -r $PATTERN *就是这种情况。

答案 1 :(得分:115)

在Linux中,我通常使用此命令以递归方式grep dir中的特定文本

grep -rni "string" *

其中,

r =递归,即搜索当前目录中的子目录
n =将行号打印到stdout
i =不区分大小写的搜索

答案 2 :(得分:28)

使用find。说真的,这是最好的方法,因为那时你可以真正看到它正在运行的文件:

find . -name "*.sql" -exec grep -H "slow" {} \;

注意,-H是特定于mac的,它在结果中显示文件名。

答案 3 :(得分:2)

如果要执行多个命令,可以使用:

for I in `ls *.sql`
do
    grep "foo" $I >> foo.log
    grep "bar" $I >> bar.log
done

答案 4 :(得分:0)

要在所有子目录中搜索,但仅在特定文件类型中进行搜索,请将grep与Optional一起使用。

例如,在当前目录中递归搜索* .yml和* .yaml中的文本:

--include