我在目錄中有幾個名爲TC_Circle1
,TC_Circle2
,`TC_Point1等的XML文件,我想用腳本更新每個文件中的開始和結束日期。開始日期和結束日期在每個文件內部和標籤中。需要在Linux中使用Perl腳本修改幾個XML文件env
我在使用Sun機器時遇到了一個腳本,但它不適用於新的HP Linux機器。它不顯示任何錯誤並且不會更改日期。我需要幫助讓它在Linux中工作。該腳本:
#!/usr/local/bin/perl
$numArgs = @ARGV;
if ($numArgs != 2)
{
print "Usage: replace_default_date.pl DEFAULT_START_DATE DEFAULT_STOP_DATE\n";
}
@filenames = `ls TC*`;
chomp(@filenames);
foreach $file (@filenames)
{
open(REGFILE, "$file") || die "Cannot open |$file|";
@lines = <REGFILE>;
close(REGFILE);
open(WRITEFILE), ">$file") || die "Cannot open |$file|";
foreach $line (@lines)
{
if ($line =~ /DEFAULT_START_DATE/)
{
$newline = " " . $ARGV[0];
print WRITEFILE "$newline\n";
}
elsif ($line =~ /DEFAULT_STOP_DATE/)
{
$newline = " " . $ARGV[1];
print WRITEFILE "$newline\n";
}
else
{
print WRITEFILE "$line\n";
}
}
close (WRITEFILE);
}
這裏的文件怎麼修改一下開頭:提前
<RequestSomething xmlns="http://something.com/accessservice">
<period xmlns="">
<start>2013-03-06T00:00:00</start>
<stop>2013-03-07T00:00:00</stop>
</period>
... The rest of the xml file...
</RequestSomething>
感謝, 水晶
你能告訴我們一個(簡短的!)輸入數據的例子嗎? – mirod 2013-05-08 16:29:18
非常危險。如果此程序在開始寫入後死亡,則會丟失文件。它應該寫入臨時文件然後替換。 – stark 2013-05-08 16:34:51
該腳本寫得相當不錯,並且不會將這些文件視爲XML。它也不會在同一個文件上運行兩次。你確定原文有單引號的「ls TC *」,而不是反引號,這將需要將字符串作爲shell命令運行? – amon 2013-05-08 16:39:41