簡體   English   中英

Sed替換和外部命令

[英]Sed substitution and external command

我有這種格式的輸入日志文件

May 23 2012 11:59:56
a;b;c
May 21 2012 16:54:12
d;e;f
May 19 2012 16:22:52
g;h;i
...

我想以這種格式輸出它

2012-05-23
a;b;c
2012-05-21
d;e;f
2012-05-19
g;h;i
...

使用sed ,我知道如何替換日期行

% sed 's/.*:.*:.*/match_string/' input.txt
match_string
a;b;c
match_string
d;e;f
match_string
g;h;i
...

使用date ,我知道如何轉換日期:

% date -d 'May 23 2012 11:59:56' '+%Y-%m-%d'
2012-05-23

但是如何在sed命令期間對match_string進行求值?

如果你有GNU Sed可用,你可以使用e標志:

sed 's/.*:.*/date -d"&" "+%Y-%m-%d"/ge' file

將幫助您的示例,請參閱測試:

kent$  echo "May 23 2012 11:59:56
a;b;c
May 21 2012 16:54:12
d;e;f
May 19 2012 16:22:52
g;h;i"|sed 's/.*:.*/date -d"&" "+%Y-%m-%d"/ge'
2012-05-23
a;b;c
2012-05-21
d;e;f
2012-05-19
g;h;i

我使用Perl:

perl -pe '$_ = qx{ date -d "$_" +%F } if $. % 2 == 1'

當然Perl可以做日期:

perl -MTime::Piece -lpe '
    $_ = Time::Piece->strptime($_, "%b %d %Y %T")->ymd if $. % 2 == 1
'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM