如何用文本文件中的命令输出替换值?

Ben*_*min 21 bash replace sed

我有一个包含以下内容的文件:

<?php return 0;
Run Code Online (Sandbox Code Playgroud)

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

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

date +%s
Run Code Online (Sandbox Code Playgroud)

我可以用以下代码替换字符串sed:

sed 's/old/new/g' input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)

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

fed*_*qui 34

通常,请使用以下语法:

sed "s/<expression>/$(command)/" file
Run Code Online (Sandbox Code Playgroud)

这将寻找<expression>并替换它的输出command.


对于您的特定问题,您可以使用以下内容:

sed "s/0/$(date +%s)/g" input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)

这将0使用命令的输出替换文件中的任何内容date +%s.请注意,您需要使用双引号来$()解释命令.否则,你会得到一个文字$(date +%s).

如果要自动更新文件,请添加-i到sed命令:sed -i "s/....这称为就地编辑.


测试

给定具有此内容的文件:

<?php return 0;
Run Code Online (Sandbox Code Playgroud)

让我们看看它返回的内容:

$ sed "s/0/$(date +%s)/g" file
<?php return 1372175125;
Run Code Online (Sandbox Code Playgroud)

  • 如果必须在每次匹配时调用命令,那么如何才能使这个工作? (4认同)