如何系统地替换文件的某些部分?
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,}
这基本上就是 awk
或 sed
的 inplace 选项在幕后所做的事情。
我在 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,}
这基本上就是 awk
或 sed
的 inplace 选项在幕后所做的事情。