增加文件中的日期

增加文件中的日期

我有一个文件,里面有一行文本。不使用编辑器如何修改其内容vi

下面是示例:

PROCESS DATE =2014-08-01

我想将2014-08-01日期增加到下一天。我的想法是创建一个变量。我怎样才能做到这一点?

答案1

你可以使用perl

perl -MTime::Piece -pi -e 's/\d{4}-\d\d-\d\d/
 (Time::Piece->strptime($&,"%Y-%m-%d")+24*60*60)->date/ge' file

将增加文件中的每个日期。

答案2

我会写:

increment_date() {
    local current=$(grep -oP 'PROCESS DATE =\K.+' file)
    local next=$(date -d "$current + 1 day" +%F)
    sed -i "/PROCESS DATE =/s/$current/$next/" file
}

cat file
increment_date
cat file
increment_date
cat file
PROCESS DATE =2012-02-28
PROCESS DATE =2012-02-29
PROCESS DATE =2012-03-01

这假设 PROCESS DATE 行仅在文件中出现一次,并且它单独占一行。

答案3

这取决于您需要的复杂程度。如果您需要的只是将 更改01为 a 02,您可以使用类似的东西

sed -i 's/01/02/' file

或者

perl -i -pe 's/01/02/' file

或者,为了安全起见,仅当 位于01行尾时才执行此操作:

sed -i 's/01$/02/' file
perl -i -pe 's/01$/02/' file

由于该标志,上述两种解决方案都会修改原始文件-i

如果您需要能够考虑实际日期,例如递增2014-02-282014-03-01,则需要使用可以解析日期的成熟编程语言或使用以下命令date

$ while IFS='=' read -r text date; do 
    echo "$text=$(date -d "$date + 1 day" +%F)"; 
  done < file > new_file

上面将分割输入行,将as=之前的部分保存为,其余部分保存为。然后,将其输入命令,该命令可以执行奇特的日期操作,例如添加一天,然后以您想要的格式打印出来(在本例中,格式意味着)。请注意,这假定为 GNU 日期。=$text$date$datedate%FYear-Month-Day

echo命令打印内容$text,然后打印日期增加一天。如果=文件的任何行上有多个行,此操作将会失败。

答案4

我自己的日期工具提供一个命令行工具dadd,它可以遍历文本文件并向找到的每个日期添加一些内容:

$ dadd -S +1d FILE
PROCESS DATE =2014-08-02

相关内容