5

Centos / Linux バッシュ

私はログファイルを持っています。そこにはたくさんのテキストとエポック番号がいたるところにあります。すべてのエポックを読み取り可能な日付/時刻に置き換えたい。

それが仕事のためのツールのように見えるので、私はsedを介してこれを望んでいました。変換のために変数(エポック)を実際に解析するためのsedの置換部分を取得できないようです。

私が取り組んでいるもののサンプル...

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 部分は、提供されたエポック変数を有用な日付に変換します。このような..

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

では、「見つかった」アイテムをコマンドに解析するにはどうすればよいですか。私はそれを機能させることができないようです。

どんな助けでも素敵です。別の方法があれば、それはクールでしょう...しかし、sedが最も速いと思います。

御時間ありがとうございます!

4

2 に答える 2

7

それは仕事のためのツールのようです

いいえそうではありません。コマンドの引数にする方法はありませんsed&Perl など、より強力なものが必要です。

perl -pe 'if ( ($t) = /(1[0-9]+)/ ) { s/$t/localtime($t)/e }'
于 2012-09-05T16:51:36.410 に答える
1

GNU sed、入力でそれを行うことができます:

ファイル内

Some stuff 1346474454 And not working

GNU sed は/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

日付付き出力

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

これは、行で見つかった最後のエポックのみを置き換えることに注意してください。それ以上ある場合は再実行します。

于 2012-09-06T07:36:54.700 に答える