如何执行另一个命令的输出

How to execute the output of another command

我有一个 CSV 文件,我想在其中修改以下字符串:

${GDATEF(-4D,ddMMyyyy)}

为此,我使用以下脚本:

#!/usr/bin/env bash

echo "replacing >>D,ddMMyyyy)<<"
sed -i "s/D,ddMMyyyy)\}/ days\\\"\ \+\\\"%d\/%m\/%Y\\\"/g" 


echo "replacing >>${GDATEF(<< AND executing date + N days"
sed -i "s/${GDATEF(/date -d \\\"`date` + /g" 

echo "the final touch ;)"
sed -i "s/date -d /date -d/g" 

这导致:

date -d\"Fri Oct 15 10:38:20 UTC 2021 + -4 days\" +\"%d/%m/%Y\"

现在我可以得到那个结果,删除一些不需要的字符并手动执行它:

sh-4.2# date -d "Fri Oct 15 09:20:53 UTC 2021 + -4 days" +"%d/%m/%Y"
11/10/2021

但是,我希望能够自动执行最后一步,有什么想法吗?

取最后的结果用sed去掉\:

echo "date -d\"Fri Oct 15 10:38:20 UTC 2021 + -4 days\" +\"%d/%m/%Y\"" | sed 's+\++'

这将输出:

date -d"Fri Oct 15 10:38:20 UTC 2021 + -4 days" +"%d/%m/%Y"

如果你执行你将得到:

11/10/2021

TL;DR

这是一站式解决方案:

eval $(echo "date -d\"Fri Oct 15 10:38:20 UTC 2021 + -4 days\" +\"%d/%m/%Y\"" | sed 's+\++')