Até onde eu sei, o modificador e
do GNU sempre passa todo o espaço padrão para o shell - e esse shell é sempre /bin/sh
Você pode ter mais sorte usando perl
- por exemplo
$ echo 'For example echo hi @(-1 day) bye "@(-1 hour)"' |
perl -pe 's/@\((.*?)\)/sprintf "%s", $d = 'date +%s --date "now $1"', chomp $d/ge'
For example echo hi 1491874845 bye "1491957645"
(ao contrário de sed
, o modificador perl
e
parece não remover a nova linha à direita da saída do comando shell - daí o chomp
).
No entanto, se você for usar perl
, é preferível usar um dos módulos disponíveis para fazer a manipulação de data - por exemplo
$ echo 'For example echo hi @(-1 day) bye "@(-1 hour)"' |
perl -MDate::Manip=ParseDateDelta,UnixDate -pe 's/@\((.*?)\)/UnixDate(ParseDateDelta($1), "%s")/ge'
For example echo hi 1491875065 bye "1491957865"