31

我有一个文件,其中包含:

<?php return 0;

我想用0当前时间戳替换 bash 中的值。

我知道我可以通过以下方式获取当前时间戳:

date +%s

我可以将字符串替换为sed

sed 's/old/new/g' input.txt > output.txt

但是如何将两者结合起来实现我想要的呢?不涉及的解决方案seddate受到欢迎,只要它们只使用 shell 工具。

4

2 回答 2

50

通常,请使用以下语法:

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;
于 2013-06-25T15:43:27.213 回答
2

当替换字符串有换行符和空格时,您可以使用其他内容。我们将尝试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
于 2018-12-31T11:15:37.120 回答