web-dev-qa-db-fra.com

Stocker la sortie de grep dans un tableau

Je dois rechercher un modèle dans un répertoire et enregistrer les noms des fichiers qui le contiennent dans un tableau.

Recherche de motif:

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

Cela m’imprime tous les noms de fichiers contenant "motif".

Si j'essaye:

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

Cela imprime un seul élément contenant une chaîne avec tous les noms de fichiers.

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

Mais, j'ai besoin:

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

Comment puis-je obtenir le résultat sans faire une opération de division ennuyeuse sur les cibles?

40
Luca Davanzo

Vous pouvez utiliser:

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

Notez l'utilisation de (...) pour la création de tableaux dans BASH.

Aussi, vous pouvez utiliser grep -l pour obtenir uniquement les noms de fichiers dans la sortie de grep (comme indiqué dans ma commande).

53
anubhava