11
votes

Sortie Grep dans la matrice

gars comment puis-je faire ce travail

`trouver / xyz / abc / musique / | grep def`

Je ne veux pas stocker la matrice dans une variable temporaire. Comment pouvons-nous utiliser directement sur ce tableau?

afin d'obtenir le 1er élément de ce tableau

echo $ {$ (`trouver / xyz / abc / musique / | grep def`) [0]} S'il vous plaît aidez-moi comment je peux atteindre ce


0 commentaires

5 Réponses :


12
votes

Si vous avez juste besoin du premier élément (ou plutôt de la ligne), vous pouvez utiliser tête : xxx

Si vous avez besoin d'accès aux éléments arbitraires, vous pouvez stocker Le tableau d'abord, puis récupérez l'élément: xxx

mais cela ne mettra pas chaque ligne de sortie GREP dans un élément séparé d'un tableau.

Si vous vous souciez de lignes entières au lieu de mots, vous pouvez utiliser tête et queue pour cette tâche, comme: xxx < / p>


3 commentaires

Merci pour le commentaire mais je veux aussi obtenir d'autres éléments. Je veux faire des opérations comme un tableau


Pourquoi dites-vous que chaque ligne de grep n'ira pas dans des éléments de tableau séparés?


Parce que chaque mot le fera. Au moins dans l'exemple que j'ai donné;)



23
votes

Mettez l'appel à trouver dans des crochets de tableau

X=( $(find /xyz/abc/music/ | grep def) )
echo ${X[1]}
echo ${X[2]}
echo ${X[3]}
echo ${X[4]}


2 commentaires

C'est celui pour moi. J'ai examiné assez quelques-unes sur la question de l'obtention de grep des résultats dans un tableau et je trouve le mot «élégant» montrant beaucoup dans un contexte négatif comme critère inaccessible ... C'est à peu près l'exemple d'une solution qui réellement répond à la définition d'élégant et accomplit la tâche dans une ligne. La plupart des réponses sont "Il n'y a pas de bon moyen de faire cela" ... "de nombreuses méthodes de rond-point ..." Merci! +1


echo $ (pensées OM01) :)



0
votes

Voulez-vous obtenir la première ligne de la sortie?

find /xyz/abc/music/ |grep def|head 1


0 commentaires

5
votes

Même si un peu de retard, la meilleure solution doit être la solution de Ray, mais vous devez écraser la variable de séparateur de champ de champ par défaut IFS à la nouvelle ligne pour prendre des lignes complètes en tant que champ de réseau. Après avoir rempli votre matrice, vous devez basculer IFS à la valeur d'origine. Je vais développer les rayons Solution: xxx

espère que cela aide


1 commentaires

Bon point, surtout si vous avez des blancs dans vos noms de fichiers. Un moyen un peu plus agréable de définir des IFS, cependant, consiste à utiliser la syntaxe ifs = $ '\ n'.



1
votes

Ceci fonctionnera

array_name=(`find directorypath | grep "string" | awk -F "\n" '{print $1}'`)
echo $array_name


0 commentaires