更改文件中的日期输出

更改文件中的日期输出

我希望将 txt 文件中的此类条目 26/04/2008 转换为 2008 年 4 月

注意:这没有使用日期命令,这些是文件中的日期条目

我可以用 sed 做到这一点吗?

这是使用管道等的单行脚本的一部分

答案1

不,它不起作用(只是)sed因为您必须在过程中解析日期。

您可以使用命令的组合来完成此操作date,或者我个人会选择perl- 您可以像使用它一样使用它sed,但它也具有Time::Piece执行日期解析的模块。

可运行示例:

#!/usr/bin/env perl
use strict;
use warnings;

use Time::Piece; 

while ( <DATA> ) {
   chomp; 
   print Time::Piece->strptime($_, "%d/%m/%Y")->strftime("%B %Y"),"\n";
}

__DATA__
26/04/2008
26/05/2008
26/07/2009

您可以将其“一个衬垫”用于管道中(或者您可以指定要在最后作为参数处理的文件):

perl -MTime::Piece -nle 'print Time::Piece->strptime($_, "%d/%m/%Y")->strftime("%B %Y");'

注意 - 这两者都假设日期只是每行一个。如果需要的话,将其提取为子字符串并不是特别困难,并且可以有效地将其“sed”为子字符串模式。

#!/usr/bin/env perl
use strict;
use warnings;

use Time::Piece; 

while ( <DATA> ) {
   s|(\d{2}/\d{2}/\d{4})|Time::Piece->strptime($1, "%d/%m/%Y")->strftime("%B %Y")|e;
   print;
}

__DATA__
26/04/2008 and some text here 
a line like this with a date of 26/05/2008 
26/07/2009 and some more here maybe 

将把它变成:

April 2008 and some text here 
a line like this with a date of May 2008 
July 2009 and some more here maybe

再次,单行化为:

perl -MTime::Piece -pe 's|(\d{2}/\d{2}/\d{4})|Time::Piece->strptime($1, "%d/%m/%Y")->strftime("%B %Y")|e;'  

相关内容