#1 Le 23/10/2022, à 19:14
- PowaBanga
[Bash] retourner la valeur entre deux caractères avec retours (Résolu)
Salut à tous,
voici un fichier auquel j'ai à faire :
not_a_string=('do' 'not' 'return' 'this')
string=(
'here' 'are' 'some' 'strings' 'to' 'return'
)
yet_not_a_string=(
'not'
'return'
'this'
'too'
)
Dans ce fichier, je dois récupérer les valeurs qui sont entre parhentèses, à la suite d'un des trois valeurs qui sont spécifiquement avant un "="
donc :
not_a_string devrait retourner :
`do not return this`
string devrait retourner :
`here are some strings to return`
et yet_not_a_string devrait retourner
`not return this too`
Je voudrais pouvoir récupérer les valeur voulue à la sortie d'un `cat` sur le fichier combiné avec des `| grep` `|sed` `|cut` ou autre
ici je suis particulièrement embêté par les valeurs contenue entre parenthèses après " string=(" car il contient des retours à la ligne
du coup, si je fait
cat monfichier | grep -e "^string"
cela me retournera la ligne string, sans les valeurs qui l’accompagne ensuite entre parenthèses.
Si quelqu'un savait m'éclairer ça serait tip top !
Dernière modification par PowaBanga (Le 25/10/2022, à 18:19)
Hors ligne
#2 Le 23/10/2022, à 20:05
- Watael
Re : [Bash] retourner la valeur entre deux caractères avec retours (Résolu)
c'est moi, ou ça ne veut rien dire ?
il doit manquer quelque chose d'évident pour PowaBanga, mais qu'il n'expose pas ici.
Dernière modification par Watael (Le 23/10/2022, à 20:17)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#3 Le 23/10/2022, à 20:23
- Tawal
Re : [Bash] retourner la valeur entre deux caractères avec retours (Résolu)
Hello,
À question ambiguë, réponse ambiguë :
Essaie de sourcer le fichier.
source /chemin/du/fichier
echo "${string[@]}"
Edit:
correction d'une erreur : strings ==> string
Dernière modification par Tawal (Le 24/10/2022, à 08:34)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#4 Le 24/10/2022, à 05:24
- PowaBanga
Re : [Bash] retourner la valeur entre deux caractères avec retours (Résolu)
Merci pour ton message watael, il semble en effet que j'ai manqué de clareté. J'ai donc édité mon premier message. Est-il plus clair à présent ?
Hors ligne
#5 Le 24/10/2022, à 06:19
- matrix-bx
Re : [Bash] retourner la valeur entre deux caractères avec retours (Résolu)
Salut,
$ tr -d \\n < monfichier | sed s"/)/)\\n/g"
not_a_string=('do' 'not' 'return' 'this')
string=('here' 'are' 'some' 'strings' 'to' 'return')
yet_not_a_string=('not''return''this''too')
$
Cela te conviendrait-il ?
Utilisations des balises de mises en formes.
Hors ligne
#6 Le 24/10/2022, à 08:31
- Tawal
Re : [Bash] retourner la valeur entre deux caractères avec retours (Résolu)
@PowaBanga :
Tu nous montres un fichier de données qui définit des tableaux en bash.
Si ce fichier ne contient que des données de ce type alors ma solution est viable.
Tu sources le fichier, et tu récupères donc les tableaux définis dans ce fichier.
Cela fonctionne aussi bien dans un terminal que dans un script.
source le_fichier_de_données
echo "Tableau string : ${string[@]}"
echo "Tableau not_a_string : ${not_a_string[@]}"
echo "Tableau yet_not_a_string : ${yet_not_a_string[@]}"
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#7 Le 24/10/2022, à 08:48
- matrix-bx
Re : [Bash] retourner la valeur entre deux caractères avec retours (Résolu)
@PowaBanga :
Tu nous montres un fichier de données qui définit des tableaux en bash.
Si ce fichier ne contient que des données de ce type alors ma solution est viable.
Tu sources le fichier, et tu récupères donc les tableaux définis dans ce fichier.
Cela fonctionne aussi bien dans un terminal que dans un script.source le_fichier_de_données echo "Tableau string : ${string[@]}" echo "Tableau not_a_string : ${not_a_string[@]}" echo "Tableau yet_not_a_string : ${yet_not_a_string[@]}"
J'aime beaucoup, mais ça correspond pas complètement à la demande formulée
Je voudrais pouvoir récupérer les valeur voulue à la sortie d'un `cat` sur le fichier combiné avec des `| grep` `|sed` `|cut` ou autre
Mais ça fonctionne parfaitement ;p
$ cat monfichier
not_a_string=('do' 'not' 'return' 'this')
string=(
'here' 'are' 'some' 'strings' 'to' 'return'
)
yet_not_a_string=(
'not'
'return'
'this'
'too'
)
$ source monfichier
$ echo ${string[@]}
here are some strings to return
$ echo ${not_a_string[@]}
do not return this
$ echo ${yet_not_a_string[@]}
not return this too
$
Utilisations des balises de mises en formes.
Hors ligne
#8 Le 24/10/2022, à 11:11
- Tawal
Re : [Bash] retourner la valeur entre deux caractères avec retours (Résolu)
Juste comme ça, mais :
cat ... | grep ... | sed ... est un UUOP (Useless Use Of Pipe).
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#9 Le 24/10/2022, à 11:46
- matrix-bx
Re : [Bash] retourner la valeur entre deux caractères avec retours (Résolu)
Juste comme ça, mais :
cat ... | grep ... | sed ... est un UUOP (Useless Use Of Pipe).
Tout le monde a une certaine tendance à avoir du mal à se débarrasser de mauvaises habitudes prises lors de la découverte ou l'apprentissage des outils.
Ça m'a moi aussi pris un peu de temps pour passer de cat | grep | wc à grep -c
Utilisations des balises de mises en formes.
Hors ligne
#10 Le 25/10/2022, à 18:18
- PowaBanga
Re : [Bash] retourner la valeur entre deux caractères avec retours (Résolu)
Alors pour la première méthode de matrix-bx, c'est vrai que j'avais pas pensé à remplacer le retour à la ligne, ça m'a donné pour des piste pour le résoudre de la façon dont je voulais le faire
tawai... je n'avais pas compris ton premier message à la première lecture... je n'avais pas du tout pensé imaginer à faire ça... Une pièce vient de tomber dans ma tête, je me sens à la fois bête et léger comme une plume.
Merci beaucoup !
Hors ligne
#11 Le 25/10/2022, à 19:32
- Tawal
Re : [Bash] retourner la valeur entre deux caractères avec retours (Résolu)
Disons que c'est une astuce pour un cas particulier
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#12 Le 30/10/2022, à 17:48
- LeoMajor
Re : [Bash] retourner la valeur entre deux caractères avec retours (Résolu)
salut,
si tu supprimes "\n"
sed -z 's/\n//g; s/)/);/gp' exemple.txt
eval $(sed -z 's/\n//g; s/)/);/gp' exemple.txt)
echo "${not_a_string[@]}" etc ...
Hors ligne
#13 Le 30/10/2022, à 18:54
- Tawal
Re : [Bash] retourner la valeur entre deux caractères avec retours (Résolu)
eval is evil.
Comme dirait Watael : Welcome to sHell.
Dernière modification par Tawal (Le 30/10/2022, à 19:12)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#14 Le 31/10/2022, à 15:58
- LeoMajor
Re : [Bash] retourner la valeur entre deux caractères avec retours (Résolu)
A/ si tu supprimes "\n"
:~$ eval $(sed -zn 's/\n//g; s/)/);/gp' example.txt)
:~$ echo -e "${not_a_string[@]}\n${string[@]}\n${yet_not_a_string[@]}"
B/ si tu gardes "\n"
:~$ cat /tmp/multilines.awk
#/usr/bin/awk -f
/\(.*\)/ {match($0,/[(](.*)[)]/,t); print "1",t[1]}
/\(/ {sub(/.*[(]/,""); a=$0; while(!($0~/\)/)){getline; a=a$0}; gsub(/[)]/,"",a); print "2",a; a=""}
awk -f /tmp/multilines.awk exemple.txt
1 'do' 'not' 'return' 'this'
2 'do' 'not' 'return' 'this'
2 'here' 'are' 'some' 'strings' 'to' 'return'
2 'not''return''this''too'
tu as aussi /debut/,/fin/ capture multi-lines sous sed/awk/..., mais cela suppose que le découpage soit régulier.
Hors ligne