将grep输出存储在数组中

时间:2014-07-22 14:55:24

标签: arrays bash shell

我需要搜索目录中的模式,并将包含它的文件的名称保存在数组中。

搜索模式:

grep -HR "pattern" . | cut -d: -f1

这将打印出包含" pattern"。

的所有文件名

如果我尝试:

targets=$(grep  -HR "pattern" . | cut -d: -f1)
length=${#targets[@]}
for ((i = 0; i != length; i++)); do
   echo "target $i: '${targets[i]}'"
done

这只打印一个包含所有电影名字的字符串的元素。

output: target 0: 'file0 file1 .. fileN'

但我需要:

 output: target 0: 'file0'
 output: target 1: 'file1'
 .....
 output: target N: 'fileN'

如果不对目标进行枯燥的拆分操作,我怎样才能达到结果?

1 个答案:

答案 0 :(得分:50)

您可以使用:

targets=($(grep -HRl "pattern" .))

注意在BASH中使用(...)进行数组创建。

此外,您可以使用grep -l仅获取grep输出中的文件名(如我的命令所示)。