Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex perl one liner中正则表达式组的日期到历元转换?_Regex_Perl - Fatal编程技术网

Regex perl one liner中正则表达式组的日期到历元转换?

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函数 注: 我可以将月和日硬编码到某

我有一些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函数

注:

  • 我可以将月和日硬编码到某个地方(最好是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
      Yes
      DateTime
      使它更短,但是
      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
      Yes
      DateTime
      使它更短,但是
      Time::Local
      是一个核心模块,是perl附带的。这就是为什么我把它作为评论而不是答案发布的原因;您无需安装
      DateTime
      即可完成任务。但是关于日期的问题需要一个
      DateTime
      答案,对吗?:)很高兴知道这两种形式。谢谢。当您可以将文件名直接作为参数传递给
      perl
      ?@spasic-“使每个程序都成为过滤器”时,为什么要使用
      cat
      。换句话说,支持从stdin读取输入,这样您就可以使用管道来编写它们。在运行日期转换逻辑之前,我可能希望对csv数据进行一些转换。在这个例子中,我省略了这样的逻辑,因为它不相关。如果可以将文件名直接作为参数传递给
      perl
      ?@spasic-“使每个程序都成为过滤器”,为什么要使用
      cat
      。换句话说,支持从stdin读取输入,这样您就可以使用管道来编写它们。在运行日期转换逻辑之前,我可能希望对csv数据进行一些转换。我在这个例子中省略了这样的逻辑,因为它不相关。