我有一个文本文件,其中有一个xml数据。现在我想用dd / mm / yyyy格式替换当前日期加上2天的日期。我试过它会在Unix中使用sed命令,但我无法做到.Below命令我试图改变日期。但是它没有改变文本。
sed -i 's/\<Date\>*\<Date\>/\<Date\>date +"%m/%d/%y"<Date\>/g' avltest.xml
<Args>
<Date>01/10/2017</Date>
<\Args>
在 Date 字段中,我想在运行命令时更改日期,或者我可以从脚本中使用该命令。
答案 0 :(得分:0)
这是perl版本:
perl -MPOSIX=strftime -i -pe 's{<Date>.*?</Date>}{"<Date>" . strftime("%m/%d/%Y", localtime(time + 2 * 24 * 60 * 60)) . "</Date>"}e' avltest.xml
我在<
和>
之前移除了多余的反斜杠,在/
中添加了遗失的</Date>
,并修复了*
部分。
答案 1 :(得分:0)
不要使用正则表达式来修改XML。 It's dirty, hacky, brittle and unnecessary:
#!/usr/bin/perl
use warnings;
use strict;
use XML::Twig;
use Time::Piece;
#load your file
my $twig = XML::Twig->new->parsefile('avltest.xml');
#iterate all <Date> elements.
foreach my $date_elt ( $twig->get_xpath('//Date') ) {
my $date = localtime;
#increment it by two days.
$date += 2 * 60 * 60 * 24; #two days.
#replace it.
$date_elt -> set_text($date -> strftime("%m/%d/%Y"));
}
#print XML to STDOUT.
$twig -> set_pretty_print('indented_a');
$twig -> print;
这将按照描述执行您想要的操作,而不会被“年末/月末”绊倒。
如果您愿意,可以在XML twig中使用parsefile_inplace
- 这需要稍微不同的代码设置。