Centos / Linux Bash
我有一个日志文件,其中有大量的文本和划时代数字到处都是。我想把所有的时代都替换成可读的日期/时间。
我一直想通过sed实现这一点,因为这似乎是这项工作的工具。我似乎无法让sed的替换部分实际将变量(Epoch)解析到它以进行转换。
我工作的样本..。
echo "Some stuff 1346474454 And not working" \
| sed 's/1[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/'"`bpdbm -ctime \&`"'/g'
Some stuff 0 = Thu Jan 1 01:00:00 1970 And not workingbpdbm部分将将提供的历元变量转换为有用的日期。像这样..。
bpdbm -ctime 1346474454
1346474454 = Sat Sep 1 05:40:54 2012那么,如何将“查找”项解析为命令。因为我似乎没办法让它起作用。
任何帮助都会很好。如果有其他方法,那将是cool...but,我怀疑sed将是最快的。
耽误您时间,实在对不起!
发布于 2012-09-05 16:51:36
那似乎是这份工作的工具
不,它不是。sed只能使用&本身,没有办法使它成为命令的参数。您需要更强大的功能,例如Perl:
perl -pe 'if ( ($t) = /(1[0-9]+)/ ) { s/$t/localtime($t)/e }'发布于 2012-09-06 07:36:54
您可以使用GNU,输入:
infile
Some stuff 1346474454 And not workingGNU支持/e参数,该参数允许将命令输出到模式空间,这是利用bpdbm的一种方法:
sed 's/(.*)(1[0-9]{9})(.*)/echo \1 $(bpdbm -ctime \2) \3/e' infile或与coreutils date
sed 's/(.*)(1[0-9]{9})(.*)/echo \1 $(date -d @\2) \3/e' infile带有date的输出
Some stuff Sat Sep 1 06:40:54 CEST 2012 And not working获得与bpdbm相同的输出
sed 's/(.*)(1[0-9]{9})(.*)/echo "\1$(date -d @\2 +\"%a %b %_d %T %Y\")\3"/e' infile输出
Some stuff Sat Sep 1 06:40:54 2012 And not working注意,这只是替换了在一行中找到的最后一个时代。如果还有更多的话请重新运行。
https://stackoverflow.com/questions/12286085
复制相似问题