12
votes

Modifier une valeur de la propriété dans un fichier de propriétés à partir de Shell Script

Le titre dit tout. J'ai besoin de remplacer une valeur de propriété que je ne connais pas à une valeur différente. J'essaye ceci:

#!/bin/bash
sed -i "s/myprop=[^ ]*/myprop=$newvalue/g" file.properties


3 commentaires

/ est juste le délimiteur habituel (mais pas obligatoire) pour sed . Que se passe-t-il si vous essayez autre chose, comme pipe ( | )?


@DANFEGO a travaillé! Il m'a fallu de mieux comprendre que le / dans ma chaîne var était le problème. oublié que vous pouvez changer de délimiteur SED. Merci


Pourquoi utilisez-vous le modificateur g du tout?


3 Réponses :


7
votes

sed peut utiliser des caractères autres que / comme délimiteur, même si / est le plus courant. Lorsqu'il s'agissait de choses comme des chemins de chemin, il est souvent utile d'utiliser quelque chose comme pipe ( | ).


1 commentaires

Pour certains SED, vous devrez «échapper» à la première instance d'un délimiteur Reg-ex non standard, comme 's \ | srch | replecteur |'. Bonne chance à tous.



9
votes

Si votre fichier de propriété est délimité avec = signe comme celui-ci - xxx

alors vous pouvez utiliser awk faire modifiy le Valeur paramètre en connaissant simplement le nom de paramètre . Par exemple, si nous voulons modifier le fichier param2 dans votre fichier de propriétés, nous pouvons effectuer les éléments suivants - xxx

maintenant, le code ci-dessus one-liner vous nécessite Code HARD la nouvelle valeur de param. Cela pourrait ne pas être le cas si vous l'utilisez dans un script shell et que vous devez obtenir la nouvelle valeur d'une variable.

Dans ce cas, vous pouvez effectuer les suivants - xxx

dans ceci, nous créons un awk variable newval et l'initialisez-le avec votre variable de script ($ var) qui contient la nouvelle valeur de paramètre.


6 commentaires

Et si je veux ajouter une nouvelle ligne à la fin si la propriété n'existe pas?


J'ai essayé la commande awk indiqué, mais il bande le = hors de la sortie SO sorte de convertir hostname = oldvalue vers nom d'hôte NewValue - Toute idée de ce que j'ai mal?


@Oly, vous devrez définir la variable de l'OFS. Donc awk -f '=' -v of = '=' ...


Merci @jaypalsingh j'ai trouvé cette belle petite description de l'OFS Field: theGeekstuff.com/2010/01/...


awk: newval1 = Test: 8080 / TestServices Erreur de syntaxe Je reçois une erreur de syntaxe pour: Toute aide être très apprécié.


Comment puis-je modifier plus d'un param.



1
votes

J'ai trouvé une fonction de quelqu'un nommé Kongchen. Il a écrit un script de fonction pour changer de valeurs de propriété et cela a fonctionné bien pour moi:

Vérifiez-le: https://gist.github.com/kongchen/6748525


0 commentaires