Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

sed: mass converting epochs amongst random other text

Tags:

bash

sed

Centos / Linux Bash

I have a log file, which has lots of text in and epoch numbers all over the place. I want to replace all epochs whereever they are into readable date/time.

I've been wanting to this via sed, as that seems the tool for the job. I can't seem to get the replacement part of sed to actually parse the variable(epoch) to it for conversion.

Sample of what I'm working with...

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

The bpdbm part will convert a supplied epoch variable into useful date. Like this..

bpdbm -ctime 1346474454
1346474454 = Sat Sep  1 05:40:54 2012

So how do i get the "found" item to be parsed into a command. As i don't seem to be able to get it to work.

Any help would be lovely. If there is another way, that would be cool...but i suspect sed will be quickest.

Thanks for your time!

like image 450
user1649704 Avatar asked Sep 05 '12 16:09

user1649704


1 Answers

that seems the tool for the job

No, it is not. sed can use & only itself, there is no way how to make it an argument to a command. You need something more powerful, e.g. Perl:

perl -pe 'if ( ($t) = /(1[0-9]+)/ ) { s/$t/localtime($t)/e }'
like image 130
choroba Avatar answered Sep 22 '22 17:09

choroba