【问题标题】:How to change selected values in text file using Perl如何使用 Perl 更改文本文件中的选定值
【发布时间】:2010-06-21 16:39:09
【问题描述】:

我需要帮助来编写一些 Perl 代码来替换文本文件中的某些选定值。下面是我的文本文件的示例。我想将“end”的值替换为日期格式YYYYMMDD的新值,键值加1,其余保持不变。

源文件:

    server=host1
    network=eth0
    start=YYYYMMDD
    end=YYYYMMDD
    key=34

如果我将“结束”值更改为 yyyymmdd(新日期)并将“键”更改为 +1。输出结果应该是:

    server=host1
    network=eth0
    start=YYYYMMDD
    end=yyyymmdd
    key=35

请为此提出解决方案。

【问题讨论】:

  • 请编辑您的问题。向我展示 A) 您的源文件的示例,B) 示例结果,C) 您提供的参数。
  • PP 说了什么,加上 D) 你试过什么?

标签: perl


【解决方案1】:

*edit: 看起来我看错了问题 新解决方案:

#!/usr/bin/perl
$filename = "a.txt";
$tempfile = "b.txt";
$newdate = "whatever";

open(IS, $filename);
open(OS, ">$tempfile");
while(<IS>)
{
    if($_ =~ /^end=(.*)$/){
        print OS "end=$newdate\n";
    } elsif ($_ =~ /^key=(.*)$/) {
        print OS "key=".($1+1)."\n";
    } else {
        print OS $_;
    }
}
close(IS);
close(OS);
unlink($filename);
rename($tempfile, $filename);

【讨论】:

    【解决方案2】:

    这个怎么样:

    #!/usr/bin/env perl
    
    while (<>) {
        s/^end=/WHATEVER=/gi;
        if (/^key=/) {
            ($key,$val) = split("=");
            $val = $val + 1;
            $_ = "$key=$val";
        }
        print;
    }
    

    在 unix 上,cat 你的文本文件 | this.pl 把它放到标准输出上。

    【讨论】:

    • 谢谢 Jskaggz:它对我有用,但“结束”被“WHATEVER”更改。我想将“end”的值更改为我传递的新值。谢谢。
    • 当然,我会将 s/^end=/WHATEVER/g 部分包装在一个函数中,然后使用 s/^end=/$whatevervar/g;
    猜你喜欢
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 2017-02-25
    • 2021-04-22
    • 2014-12-10
    相关资源
    最近更新 更多