J'ai trouvé ce fil de discussion utile - donc j'ai pensé ajouter la réponse à mon propre problème.
Je voulais modifier un fichier de configuration de base de données (datastax cassandra) à partir d'une application node en javascript et pour l'un des paramètres du fichier j'avais besoin de faire correspondre une chaîne de caractères puis de remplacer la ligne suivante.
Voici ma solution.
dse_cassandra_yaml='/etc/dse/cassandra/cassandra.yaml'
// a) trouver la chaîne de recherche et récupérer tout le texte sur la ligne suivante
// b) remplacer tout le texte de la ligne suivante par une nouvelle chaîne fournie à la fonction
// note - ne modifie pas la chaîne de recherche
function replaceStringNextLine(file, searchString, newString) {
fs.readFile(file, 'utf-8', function(err, data){
if (err) throw err;
// besoin d'utiliser un double échappement '\\' lors de la mise de regex dans les chaînes !
var re = "\\s+(\\-\\s(.*)?)(?:\\s|$)";
var myRegExp = new RegExp(searchString + re, "g");
var match = myRegExp.exec(data);
var replaceThis = match[1];
var writeString = data.replace(replaceThis, newString);
fs.writeFile(file, writeString, 'utf-8', function (err) {
if (err) throw err;
console.log(file + ' mis à jour');
});
});
}
searchString = "data_file_directories:"
newString = "- /mnt/cassandra/data"
replaceStringNextLine(dse_cassandra_yaml, searchString, newString );
Après exécution, cela changera le paramètre du répertoire de données existant par le nouveau :
Fichier de configuration avant:
data_file_directories:
- /var/lib/cassandra/data
Fichier de configuration après:
data_file_directories:
- /mnt/cassandra/data
0 votes
Est-ce que
valeur
est une variable?