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

时间:2013-06-25 15:41:42

标签: bash replace sed

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

<?php return 0;

我想用bash替换值0乘以当前时间戳。

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

date +%s

我可以用sed替换字符串:

sed 's/old/new/g' input.txt > output.txt
但是如何将两者结合起来实现我想要的呢?不涉及seddate的解决方案也是受欢迎的,只要它们只使用shell工具。

2 个答案:

答案 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