首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sed:在其他随机文本中的质量转换时代

sed:在其他随机文本中的质量转换时代
EN

Stack Overflow用户
提问于 2012-09-05 16:42:59
回答 2查看 1.5K关注 0票数 5

Centos / Linux Bash

我有一个日志文件,其中有大量的文本和划时代数字到处都是。我想把所有的时代都替换成可读的日期/时间。

我一直想通过sed实现这一点,因为这似乎是这项工作的工具。我似乎无法让sed的替换部分实际将变量(Epoch)解析到它以进行转换。

我工作的样本..。

代码语言:javascript
复制
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 working

bpdbm部分将将提供的历元变量转换为有用的日期。像这样..。

代码语言:javascript
复制
bpdbm -ctime 1346474454
1346474454 = Sat Sep  1 05:40:54 2012

那么,如何将“查找”项解析为命令。因为我似乎没办法让它起作用。

任何帮助都会很好。如果有其他方法,那将是cool...but,我怀疑sed将是最快的。

耽误您时间,实在对不起!

EN

回答 2

Stack Overflow用户

发布于 2012-09-05 16:51:36

那似乎是这份工作的工具

不,它不是。sed只能使用&本身,没有办法使它成为命令的参数。您需要更强大的功能,例如Perl:

代码语言:javascript
复制
perl -pe 'if ( ($t) = /(1[0-9]+)/ ) { s/$t/localtime($t)/e }'
票数 7
EN

Stack Overflow用户

发布于 2012-09-06 07:36:54

您可以使用GNU,输入:

infile

代码语言:javascript
复制
Some stuff 1346474454 And not working

GNU支持/e参数,该参数允许将命令输出到模式空间,这是利用bpdbm的一种方法:

代码语言:javascript
复制
sed 's/(.*)(1[0-9]{9})(.*)/echo \1 $(bpdbm -ctime \2) \3/e' infile

或与coreutils date

代码语言:javascript
复制
sed 's/(.*)(1[0-9]{9})(.*)/echo \1 $(date -d @\2) \3/e' infile

带有date的输出

代码语言:javascript
复制
Some stuff Sat Sep 1 06:40:54 CEST 2012 And not working

获得与bpdbm相同的输出

代码语言:javascript
复制
sed 's/(.*)(1[0-9]{9})(.*)/echo "\1$(date -d @\2 +\"%a %b %_d %T %Y\")\3"/e' infile

输出

代码语言:javascript
复制
Some stuff Sat Sep  1 06:40:54 2012 And not working

注意,这只是替换了在一行中找到的最后一个时代。如果还有更多的话请重新运行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12286085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档