Regex perl one liner中正则表达式组的日期到历元转换?
我有一些csv数据,如下所示:Regex perl one liner中正则表达式组的日期到历元转换?,regex,perl,Regex,Perl,我有一些csv数据,如下所示: player A,1991,2006 player B,1958,1972 我想把它改为使用年代,而不是年份,这样看起来像: player A,1329638400,162008400 player B,1326389534,326359832 我更喜欢使用以下perl习惯用法: cat player_data.csv | perl -pe 's{...}{...}g' 但是尝试在我不熟悉的正则表达式中调用相关的perl函数 注: 我可以将月和日硬编码到某
player A,1991,2006
player B,1958,1972
我想把它改为使用年代,而不是年份,这样看起来像:
player A,1329638400,162008400
player B,1326389534,326359832
我更喜欢使用以下perl习惯用法:
cat player_data.csv | perl -pe 's{...}{...}g'
但是尝试在我不熟悉的正则表达式中调用相关的perl函数
注:
- 我可以将月和日硬编码到某个地方(最好是7月1日,这是新的足球赛季的开始,我正在尝试获取有关他们职业生涯的数据)
- 这应该可以做到:
perl -pe 'use Time::Local; s/(\d{4})/timelocal(0,0,0,1,0,$1)/ge' player_data.csv
注意,这假设您希望本地时间为1月1日00:00。如果您想要UTC,只需使用timegm
而不是timelocal
即可:
perl -pe 'use Time::Local; s/(\d{4})/timelocal(0,0,0,1,0,$1)/ge' player_data.csv
注意,这假设您希望本地时间为1月1日00:00。如果您想要UTC,只需使用
timegm
而不是timelocal
谢谢。或者我更喜欢:cat player_data.csv | perl-pe'use Time::Local;s{(\d+)}{timelocal(0,0,0,1,0,$1)}ge'
。只要网站允许,我会尽快标记正确。或者这个:perl-MDateTime-pe's/\d{4}/DateTime->new(year=>$&)->epoch/ge'player_data.csv
YesDateTime
使它更短,但是Time::Local
是一个核心模块,是perl附带的。这就是为什么我把它作为评论而不是答案发布的原因;您无需安装DateTime
即可完成任务。但是关于日期的问题需要一个DateTime
答案,对吗?:)很高兴知道这两种形式。谢谢,谢谢。或者我更喜欢:cat player_data.csv | perl-pe'use Time::Local;s{(\d+)}{timelocal(0,0,0,1,0,$1)}ge'
。只要网站允许,我会尽快标记正确。或者这个:perl-MDateTime-pe's/\d{4}/DateTime->new(year=>$&)->epoch/ge'player_data.csv
YesDateTime
使它更短,但是Time::Local
是一个核心模块,是perl附带的。这就是为什么我把它作为评论而不是答案发布的原因;您无需安装DateTime
即可完成任务。但是关于日期的问题需要一个DateTime
答案,对吗?:)很高兴知道这两种形式。谢谢。当您可以将文件名直接作为参数传递给perl
?@spasic-“使每个程序都成为过滤器”时,为什么要使用cat
。换句话说,支持从stdin读取输入,这样您就可以使用管道来编写它们。在运行日期转换逻辑之前,我可能希望对csv数据进行一些转换。在这个例子中,我省略了这样的逻辑,因为它不相关。如果可以将文件名直接作为参数传递给perl
?@spasic-“使每个程序都成为过滤器”,为什么要使用cat
。换句话说,支持从stdin读取输入,这样您就可以使用管道来编写它们。在运行日期转换逻辑之前,我可能希望对csv数据进行一些转换。我在这个例子中省略了这样的逻辑,因为它不相关。