2017-01-09 7 views
-1

私はxmlデータを持つテキストファイルを持っています。今私は現在の日付とdd/mm/yyyy形式で2日の日付を置き換えたいと思う。私はUnixでsedコマンドを実行しようとしましたが、私はそのコマンドを実行することができません.Belowコマンドで日付を変更しようとしましたが、テキストは変更されません。私は私のコマンドを実行したり、私はスクリプトからそのコマンドを使用することができたときに日付を変更したいフィールドでxmlを持つtxtファイルの日付を置き換えます

sed -i 's/\<Date\>*\<Date\>/\<Date\>date +"%m/%d/%y"<Date\>/g' avltest.xml 

<Args> 
    <Date>01/10/2017</Date> 
<\Args> 

+0

https://www.gnu.org/software/sed/manual/sed.html#BRE-syntax – melpomene

答えて

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>で行方不明/を追加し、*一部を修正しました。

+0

OPは+2日後と考えてください。 – Sobrique

+0

@Sobrique Thanks、編集されました。 – melpomene

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; 

これは「月の年/終わりの終わり」でアップトリップし説明するように、あなたがやりたい、としません。

ご希望の場合はparsefile_inplaceをXML twigに使用できます。これは少し異なるコード設定が必要です。

関連する問題