Salut,
J'ai dans un fichier le nom d'une base de données que je voudrais mettre dans une variable, mon problème est que je n'arrive pas à récupérer juste le nom de celle-ci.
En utilisant un find et un grep je tombe sur la bonne ligne où se trouve ma base de données.
Le format de la ligne dans laquelle se trouve le nom de la bdd est :
'nom d'une variable'='//'lieu où se trouve ma bdd'/'nom de ma bdd'?options supplémentaires
Je tiens bien à préciser que tout est collé ensemble
Au début je pensais utilisé une regex pour commencer à saisir à partir du slash et finir au point d'interrogation mais il a commencé au premier slash et non au 3ième comme je l'aurai voulu.
Merci
# cut ou awk
Posté par ze_lionix (site web personnel) . Évalué à 2.
Considérons que tu as dans la variable $ligne la chaîne de caractère avec le format que tu mentionnes:
$nom_database=`echo $ligne | cut -d '/' -f 2 | cut -d '?' -f 1`
$nom_database=`echo $ligne | awk -F '/' '{print $2}' | awk -F '?' {print $1}`
Fuse : j'en Use et Abuse !
[^] # Re: cut ou awk
Posté par ze_lionix (site web personnel) . Évalué à 2.
J'avais pas fais attention au double slash devant => Décalage des indices de 1 !
$nom_database=
echo $ligne | cut -d '/' -f 3 | cut -d '?' -f 2
$nom_database=
echo $ligne | awk -F '/' '{print $3}' | awk -F '?' {print $2}
Fuse : j'en Use et Abuse !
# avec awk
Posté par littlebreizhman . Évalué à 2.
Si ton format ne bouge jamais, en se basant sur les '
# Récupération réussie
Posté par cerberos342 . Évalué à 2.
Ça marche super bien avec cut.
Merci beaucoup déjà pour la rapidité de vos réponses ainsi que leurs clartés.
[^] # Re: Récupération réussie
Posté par pier (site web personnel) . Évalué à 0.
Les solutions proposées fonctionnent toutes j'en suis sur, mais je viens quand même faire mon extrémiste :
Les deux solutions de "ze_lionix" comporte trop de pipe à mon gout (oui j'ai des gouts de m**** mais on se refait plus à mon age!). Et mention spéciale pour le double awk en cascade : non quand-même ! (que les choses soient claires : je ne connais pas bien awk, alors je ne prétend pas donner de leçons ici hein.) Une remarque classique pour ce type d'exemple : awk est un langage, il ne devrait pas y avoir besoin de le mixer avec un autre (du bash dans ce cas là), c'est un peu comme piper du bash vers du perl selon moi.
La solution de littlebreizhman est propre, rapide claire et efficace : parfait, à ta place j'aurai opté pour celle-ci. Tant qu'a faire appel à un programme externe autant qu'il soit optimum.
Voici une solution qui n'est ni rapide (quoique) ni claire (quoique_2) ni efficace (pas de quoique là) mais propre, elle peut paraître surdimensionnée mais elle à un avantage :
C'est du bash pur!, la voici :
Voilou, c'était juste pour ajouter un peu d'eau à ce moulin, et puis j'aime bien les petites questions comme ça (je manque de bash a mon taff)
# bien gérer sa gourmandise
Posté par Krunch (site web personnel) . Évalué à 3.
Ça dépend de comment tu écris ta regexp :
Les quantificateurs sont gourmands et utilisés de gauche à droite. Avec certaines saveurs d'expressions rationnelles, il existe cependant des versions non gourmandes des quantificateurs. Voir par exemple perlre(1).
Les mots clefs sont "quantifier" et "greedy".
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
# Avec SED ou rien!
Posté par Michaël (site web personnel) . Évalué à 1.
Voilà un filtre (où le
[&
doit être remplacé par un[[
et le&]
par un]]
pour pallier à un petit problème de dacode.Si tu lui donnes à manger
echo "'nom d_une variable'=//'lieu où se trouve ma bdd'/'nom de ma bdd'?options supplémentaires"
il te répond
'nom d_une variable'|//'lieu où se trouve ma bdd'|'nom de ma bdd'|options supplémentaires
et tu n'as plus qu'à jouer avec AWK '-F|' pour consulter la table produite par un pipe de ton fichier dans le filtre précenent. (Qu'évidemment tu cales dans une fonction autonome avec un nom qui vabien.)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.