假设我想通过date命令将时间戳中的日期转换为另一种格式。在控制台中,我会说,date -d@<timestamp>但我碰巧想对文本文件中的许多字段执行此操作。
使用eto 在sed( sed (GNU sed) 4.2.2,实际上) 中执行我是说:
$ echo 1449158360 | sed -r 's#.*([0-9]{10}).*#date -d@\1 "+%Y";#e'
2015
Run Code Online (Sandbox Code Playgroud)
有效,不错!
现在我创建了一个虚拟文件myfile:
my timestamp is 1449158360 but also I wonder what date was 1359199960.
Run Code Online (Sandbox Code Playgroud)
我想将其替换为相同但具有时间戳的相对年份:
my timestamp is 2015 but also I wonder what date was 2013.
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试运行与上面相同的命令,则会失败:
$ sed -r 's#([0-9]{10})#date -d@"\1" "+%Y";#e' myfile
sh: my: command not found
sh: but: command not found
Run Code Online (Sandbox Code Playgroud)
因为sed将第一个单词解释为要执行的内容。
显然,如果我只获取这些数据而不是其他任何东西,它就可以工作:
$ …Run Code Online (Sandbox Code Playgroud)