如何系统地替换文件的某些部分?

How to systematically replace certain parts of a file?

我在 Emacs 上使用 orgmode,并希望使用 cron 计划自动更新 orgmode 文件的一部分。

我知道如何在我选择的时间将 cron 作业设为 运行,但现在我面临 select 更改文件的某些部分的问题。

我想每天递增文件中特定位置的数字(比如每天凌晨 3 点左右)。

假设我有文件 fruit.org:

* Apple
age: 2
* Bananas 
age: 1
A really bad fruit
* Cranberry
* Death
* Easter
A cool day

我想select年龄后的所有数值然后每天递增。我将如何做到这一点 selection 和替换。我相信它会涉及正则表达式和一些工具(也许是 awk),但我从那以后就相对无能为力了。

awk中,你可以说:

awk '/age:/ { ++ } { print }' foo.org

如果您有最新版本的 GNU awk,您可以使用选项 -i inplace 就地编辑文件。否则,就照常做,即重定向到一个临时文件,然后替换原来的文件:

awk '/age:/ { ++ } { print }' foo.org > foo.org.tmp && mv foo.org{.tmp,}

这基本上就是 awksed 的 inplace 选项在幕后所做的事情。