Code pour l'analyse d'une clé/valeur dans le fichier de script shell
J'ai un fichier que je dois chercher une valeur par clé à l'aide d'un script shell. Le fichier ressemble à ceci:
HereIsAKey This is the value
Comment puis-je faire quelque chose comme:
MyVar=Get HereIsAKey
et puis MyVar doit être égale à "C'est la valeur". La clé a pas d'espace et la valeur doit être tout de suite à des espaces après la clé.
OriginalL'auteur Edwin Evans | 2013-03-12
Vous devez vous connecter pour publier un commentaire.
si
HereIsAKey
est unique dans votre fichier, essayez cela avec grep:C'est très bien: echo "(grep -Po \"(?<=^" "$1" " ).*\" fichier)", mais je vais avoir de la difficulté à assigner à une variable. Je reçois MyParam: command not found.
Jamais l'esprit. Eu: REGEXP="grep -Po \"(?<=^${1}).*\" fichier"
Merci pour cela, je pense que je vais utiliser ce genre de façon systématique.
Connexes: stackoverflow.com/questions/4990575/...
OriginalL'auteur Kent
Si vous avez besoin d'une seule variable à la fois, vous pouvez faire quelque chose comme ceci:
Le problème avec cette solution: Les variables ne sont valides qu'à l'intérieur de la boucle. Donc, ne pas essayer de le faire
$key=$value
et les utiliser après la boucle.Mise à jour: une Autre façon est de redirection d'e/S:
trouvé une solution pour l'affectation
C'est vraiment un inutilement verbeux correctif. Il suffit de prendre votre
while read
boucle, mettre<file
sur la fin au lieu decat file
sur le début, et vous avez terminé. Voir aussi BashFAQ #24.Aujourd'hui, je me demande moi-même à ce sujet. J'ai copié à partir de quelque part et cru qu'il était le plus intelligent possible mise en œuvre. Debians installateurs contiennent beaucoup de ces redirections...
Ils ont généralement de le faire parce qu'ils veulent être en mesure d'utiliser l'original de la norme d'entrée à l'intérieur de la boucle. Bien sûr, il est possible que certains d'entre eux n'a tout simplement un culte du cargo copie à partir d'un script lorsque cela est réellement nécessaire.
OriginalL'auteur Daniel Alder
Si vous n'avez pas de grep qui prend en charge Perl-compatible regular expressions, la suite semble fonctionner:
grep "^$KEY" $FILE | cut -d'=' -f2-
OriginalL'auteur Roger Lipscombe
Si le fichier est trié, les recherches seront lents:
Si le fichier est trié, vous pouvez obtenir une rapide recherche avec
"L'aspect utilitaire est apparue dans la Version 7 AT&T Unix".
OriginalL'auteur William Pursell
- Je utiliser un fichier de propriété qui est partagé entre plusieurs langues, j'utilise une paire de fonctions:
load_properties
lit à partir de laconfig.properties
fichier remplissage d'un ensemble de variables__property_...
pour chaque ligne dans le fichier, get_prop puis permet de définir une variable basée sur des propriétés chargées. Il fonctionne dans la plupart des cas qui sont nécessaires.Oui, je me rends compte il y a un eval là, ce qui le rend dangereux pour la saisie de l'utilisateur, mais il fonctionne pour ce que j'en avais besoin pour le faire.
OriginalL'auteur Petesh
Les deux états ne sont pas strictement nécessaire, mais sympa codes de sortie pour indiquer le succès ou l'échec à trouver la clé donnée. Ils peuvent aussi vous aider à distinguer entre "la clé est une chaîne vide pour la valeur" et "la clé n'a pas été trouvé".
OriginalL'auteur chepner