Kotlin新手,我想在文件中的特定匹配后在文件中插入一行。我知道如何使用sed执行此操作:
function createAgreementTemplate(data, callback) {
serviceHelper.createModel(AgreementTemplate, 'agreementTemplate', data, callback);
}
但是我想了解我如何在Kotlin中解决这个问题。到目前为止,我已经得到了printWriter接口,但我没有看到任何明显暗示偏移或正则表达式参数的东西。
到目前为止,我已经:
function createModel(model, modelName, modelData, callback) {
logger.debug('Creating new Model : %s', modelName);
var modelObj = model(modelData);
modelObj.save(function (err, newModelObj) {
if (err) {
logger.error('Error adding new %s ! Error : %s', modelName, JSON.stringify(err));
callback(utils.handleMongodbError(err), null);
} else {
logger.info('New Model of type : %s created with id : %s', modelName, JSON.stringify(newModelObj._id));
var result = {};
result.status = httpStatus.OK;
result.result = newModelObj._id;
callback(null, result);
}
});
}
谢谢!
答案 0 :(得分:5)
GNU' sed'不插入/删除/更新文件中的行,它转换输入流并提供将输出流发送到stdout
,文件,甚至临时文件的选项,然后在转换后覆盖原始文件已完成(这是--in-place
选项)。
以下是一些应该让您入门的代码,但请注意,有很多方法可以缓冲和读/写文件,流等。
val file = File("file.txt")
val tempFile = createTempFile()
val regex = Regex("""some line in file""")
tempFile.printWriter().use { writer ->
file.forEachLine { line ->
writer.println(when {
regex.matches(line) -> "a some text I'd like to add after line"
else -> line
})
}
}
check(file.delete() && tempFile.renameTo(file)) { "failed to replace file" }
有关如何转换文本流的更多详细信息,另请参阅sed, a stream editor。