我有一个包含以下内容的文件:
<?php return 0;
我想用bash替换值0
乘以当前时间戳。
我知道我可以通过以下方式获取当前时间戳:
date +%s
我可以用sed
替换字符串:
sed 's/old/new/g' input.txt > output.txt
但是如何将两者结合起来实现我想要的呢?不涉及sed
和date
的解决方案也是受欢迎的,只要它们只使用shell工具。
答案 0 :(得分:31)
通常,请使用以下语法:
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;
答案 1 :(得分: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