Pages : 1
#1 Le 16/09/2018, à 20:50
- lebossejames
Array grep fichier texte
Bonjour,
J'effectue cette commande:
cat monfichier.txt | grep "Mon sujet sera"
Il me retourne 2 éléments:
Mon sujet sera: La course à pied ( unknow )
Mon sujet sera: La nature (Livre de poche)
Comment faire pour qu'il me retourne un tableau des éléments contenus entre ces parenthèses? Ainsi, je pourrais utiliser un index pour choisir l'élément que je souhaite.
Merci d'avance.
Hors ligne
#2 Le 16/09/2018, à 22:01
- diesel
Re : Array grep fichier texte
Déjà, pas besoin d'un pipe. Il suffit d'écrire :
grep "Mon sujet sera" monfichier.txt
Ensuite, dans ton script, il te suffit d'entrer le code suivant :
#!/bin/bash
OLDIFS=$IFS
IFS=$'\n'
tableau=(`grep "Mon sujet sera" monfichier.txt`)
IFS=$OLDIFS
OLDIFS=""
# Et un exemple d'utilisation du tableau
echo ${tableau[0]}
echo ${tableau[1]}
exit 0
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 16/09/2018, à 22:01)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#3 Le 16/09/2018, à 22:38
- Watael
Re : Array grep fichier texte
manipuler l'IFS dans le contexte général d'un script, c'est pas top.
plutôt
mapfile -t tableau < <(commande)
Comment faire pour qu'il me retourne un tableau des éléments contenus entre ces parenthèses? Ainsi, je pourrais utiliser un index pour choisir l'élément que je souhaite.
c'est pas clair.
tu veux bien nous montrer un exemple, stp?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#4 Le 17/09/2018, à 08:19
- diesel
Re : Array grep fichier texte
Bonjour Watael,
Si j'essaye ce que tu proposes :
mapfile -t tableau < <(grep "Mon sujet sera" monfichier.txt)
J'obtiens :
Syntax error: redirection unexpected
Et en essayant des syntaxes légèrement différentes, j'ai aussi :
mapfile: not found
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#5 Le 17/09/2018, à 08:22
- Watael
Re : Array grep fichier texte
tu utilises sh ?
sh n'est pas forcément /bin/bash.
Dernière modification par Watael (Le 17/09/2018, à 08:23)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#6 Le 17/09/2018, à 08:27
- kholo
Re : Array grep fichier texte
salut,
Ensuite, dans ton script, il te suffit d'entrer le code suivant :
#!/bin/bash OLDIFS=$IFS IFS=$'\n' tableau=(`grep "Mon sujet sera" monfichier.txt`) IFS=$OLDIFS OLDIFS=""
ou comme ça :
IFS=$'\n' tableau=( $(grep "Mon sujet sera" monfichier.txt) )
oldIFS="$IFS"
IFS=$'\n' tableau=( $(grep "Mon sujet sera" monfichier.txt) )
IFS="$oldIFS"
@watael : je pensais que tu étais plus utilisateur de read !
while read une_ligne
do echo "$une_ligne"
done <<<$(grep "Mon sujet sera" monfichier.txt)
while read une_ligne
do echo "$une_ligne"
done < <(grep "Mon sujet sera" monfichier.txt)
Dernière modification par kholo (Le 17/09/2018, à 09:09)
Hors ligne
#7 Le 17/09/2018, à 08:46
- diesel
Re : Array grep fichier texte
tu utilises sh ?
sh n'est pas forcément /bin/bash.
Oups !
Par ailleurs, je travaille sur un script système écrit en sh et je me suis mélangé les pinceaux.
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#8 Le 17/09/2018, à 08:46
- Watael
Re : Array grep fichier texte
attention, kholo, là, tu as modifié l'IFS pour tout le script !
je suis une grosse feignasse : si je peux taper une seule commande plutôt que plusieurs lignes... !
et puis <<<$(commande), c'est très laid.
while read line; do : what ever; done < <(commande)
Dernière modification par Watael (Le 17/09/2018, à 08:48)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 17/09/2018, à 08:50
- lebossejames
Re : Array grep fichier texte
manipuler l'IFS dans le contexte général d'un script, c'est pas top.
plutôtmapfile -t tableau < <(commande)
Comment faire pour qu'il me retourne un tableau des éléments contenus entre ces parenthèses? Ainsi, je pourrais utiliser un index pour choisir l'élément que je souhaite.
c'est pas clair.
tu veux bien nous montrer un exemple, stp?
En résumé: l'élément à l'index 0 sera unknow et index 1 Livre de poche
C'est un script /bin/bash, comment utiliser un index en tant que variable auquel je souhaite l'augmenter dans une boucle?
Merci.
Hors ligne
#10 Le 17/09/2018, à 08:50
- diesel
Re : Array grep fichier texte
salut,
diesel83140 a écrit :Ensuite, dans ton script, il te suffit d'entrer le code suivant :
#!/bin/bash OLDIFS=$IFS IFS=$'\n' tableau=(`grep "Mon sujet sera" monfichier.txt`) IFS=$OLDIFS OLDIFS=""
ou comme ça :
IFS=$'\n' tableau=( $(grep "Mon sujet sera" monfichier.txt) )
@watael : je pensais que tu étais plus utilisateur de read !
while read une_ligne do echo "$une_ligne" done <<<$(grep "Mon sujet sera" monfichier.txt)
IFS=$'\n' tableau=( $(grep "Mon sujet sera" monfichier.txt) )
signifie que la modification de l'IFS ne sera effective QUE pour la commande qui suit ?
[EDIT] Watael a déjà répondu [/EDIT]
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 17/09/2018, à 08:54)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#11 Le 17/09/2018, à 09:03
- Watael
Re : Array grep fichier texte
dans ce cas, ce n'est pas une commande, mais une assignation de variable; l'IFS sera donc modifié pour l'ensemble du script.
comment utiliser un index en tant que variable auquel je souhaite l'augmenter dans une boucle?
« vous avez quelque chose à la mâchoire ? on ne comprend pas ce que vous dites. »
il faut lire un/des tuto(s), faire des recherches sur internet...
autre question -> autre sujet
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#12 Le 17/09/2018, à 09:27
- lebossejames
Re : Array grep fichier texte
Ce qui m'intéresse c'est la récupération des valeurs se trouvant entre parenthèses qui seront mis dans un tableau.
Hors ligne
#13 Le 17/09/2018, à 12:44
- Postmortem
Re : Array grep fichier texte
Salut,
$ cat test.txt
Mon sujet sera: La course à pied ( unknow )
Mon sujet sera: La nature (Livre de poche)
$ mapfile -t tab < <(sed -E '/Mon sujet sera:/ s/.+\(([^)]+)\)[[:blank:]]*$/\1/' test.txt)
$ for index in "${!tab[@]}"; do echo "Index $index : #${tab[index]}#"; done
Index 0 : # unknow #
Index 1 : #Livre de poche#
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne