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?
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).