我在目录中有几个名为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