如果我想通过date
命令将时间戳转换为另一种格式。在控制台中,我会使用date -d@<timestamp>
,但我想在文本文件中对许多字段执行此操作。
我在sed(GNU sed) 4.2.2
中使用e
来执行,具体如下:
$ echo 1449158360 | sed -r 's#.*([0-9]{10}).*#date -d@\1 "+%Y";#e'
2015
很好,它可以运行!
现在我创建了一个虚拟文件myfile
:
my timestamp is 1449158360 but also I wonder what date was 1359199960.
我希望将时间戳替换为相对年份的时间戳:
my timestamp is 2015 but also I wonder what date was 2013.
然而,如果我尝试运行与上述相同的命令,它会失败:
$ sed -r 's#([0-9]{10})#date -d@"\1" "+%Y";#e' myfile
sh: my: command not found
sh: but: command not found
因为sed
将第一个单词解释为要执行的内容。
如果我只获取这些数据而不进行其他操作,显然它可以工作:
$ sed -r 's#.*([0-9]{10}).*#date -d@"\1" "+%Y";#ge' myfile
2015
我在想:如果我需要在sed
中对捕获组调用date
并替换文本,而且该文本被其他必须保持不变的文本包围,那么我应该怎么做呢?
s///e
的评论 - 我建议使用Perl而不是sed来完成这项工作。 - Toby Speight