Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/09/2018, à 21: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, à 23: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, à 23: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.

En ligne

#3 Le 16/09/2018, à 23:38

Watael

Re : Array grep fichier texte

manipuler l'IFS dans le contexte général d'un script, c'est pas top. hmm
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, à 09: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.

En ligne

#5 Le 17/09/2018, à 09: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, à 09:23)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#6 Le 17/09/2018, à 09:27

kholo

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

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, à 10:09)

Hors ligne

#7 Le 17/09/2018, à 09:46

diesel

Re : Array grep fichier texte

Watael a écrit :

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.

En ligne

#8 Le 17/09/2018, à 09: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, à 09:48)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#9 Le 17/09/2018, à 09:50

lebossejames

Re : Array grep fichier texte

Watael a écrit :

manipuler l'IFS dans le contexte général d'un script, c'est pas top. hmm
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?

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, à 09:50

diesel

Re : Array grep fichier texte

kholo a écrit :

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, à 09: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.

En ligne

#11 Le 17/09/2018, à 10: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, à 10: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, à 13: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