我有一个文件,其中包含:
<?php return 0;
我想用0
当前时间戳替换 bash 中的值。
我知道我可以通过以下方式获取当前时间戳:
date +%s
我可以将字符串替换为sed
:
sed 's/old/new/g' input.txt > output.txt
但是如何将两者结合起来实现我想要的呢?不涉及的解决方案sed
也date
受到欢迎,只要它们只使用 shell 工具。
通常,请使用以下语法:
sed "s/<expression>/$(command)/" file
这将查找<expression>
并将其替换为command
.
对于您的具体问题,您可以使用以下方法:
sed "s/0/$(date +%s)/g" input.txt > output.txt
这会将0
文件中的任何内容替换为命令的输出date +%s
。请注意,您需要使用双引号来$()
解释命令。否则,你会得到一个文字$(date +%s)
.
如果您希望文件自动更新,-i
请在 sed 命令中添加:sed -i "s/...
. 这称为就地编辑。
给定具有此内容的文件:
<?php return 0;
让我们看看它返回了什么:
$ sed "s/0/$(date +%s)/g" file
<?php return 1372175125;
当替换字符串有换行符和空格时,您可以使用其他内容。我们将尝试ls -l
在一些模板文件的中间插入输出。
awk 'NR==FNR {a[NR]=$0;next}
{print}
/Insert index here/ {for (i=1; i <= length(a); i++) { print a[i] }}'
<(ls -l) template.file
或者
sed '/^Insert after this$/r'<(ls -l) template.file