J'ai trouvé ce fil utile - j'ai donc pensé ajouter la réponse à mon propre problème.
Je voulais éditer un fichier de configuration de base de données (datastax cassandra) à partir d'une application de nœud en javascript et pour l'un des paramètres du fichier dont j'avais besoin pour correspondre sur une chaîne, puis remplacer la ligne qui le suit.
C'était ma solution.
dse_cassandra_yaml='/etc/dse/cassandra/cassandra.yaml'
// a) find the searchString and grab all text on the following line to it
// b) replace all next line text with a newString supplied to function
// note - leaves searchString text untouched
function replaceStringNextLine(file, searchString, newString) {
fs.readFile(file, 'utf-8', function(err, data){
if (err) throw err;
// need to use double escape '\\' when putting regex in strings !
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 + ' updated');
});
});
}
searchString = "data_file_directories:"
newString = "- /mnt/cassandra/data"
replaceStringNextLine(dse_cassandra_yaml, searchString, newString );
Après l'exécution, le paramètre du répertoire de données existant sera remplacé 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
value
une variable?