【问题标题】:Perl find and replace one linerPerl 查找并替换一个内衬
【发布时间】:2015-07-02 06:46:15
【问题描述】:

我一直在查看有关 Perl 的其他查找和替换问题,但我不确定如何在一行中准确地实现此变体。唯一的区别是我要替换两个东西,一个是原始的,一个是替换原始字符串的修改。我在 pm 模块中的代码是:

my $num_args = $#ARGV + 1;
if ($num_args != 2) {
    print "\nUsage: pscript.pm path to file [VERSION]\n";
    exit;
}

my $version = $ARGV[1];
my $revision = $ARGV[1];
$revision =~ s/.*\.//g;
open ($inHandle, "<", $ARGV[0]) or die $^E;
open ($outHandle, ">", "$ARGV[0].mod") or die $^E;
while(my $line = <$inHandle>)
{
        $line =~ s/\<Foo\>(.*)\<\/Foo\>/\<Foo\>$version\<\/Foo\>/;
        $line =~ s/\<Bar\>(.*)\<\/Bar\>/\<Bar\>$revision\<\/Bar\>/;
        print $outHandle $line;
}

close $inHandle;
close $outHandle;

unlink $ARGV[0];
rename "$ARGV[0].mod", $ARGV[0];

不同的是:

$revision =~ s/.*\.//g;

将版本 X.X.X.1000 变成 1000,然后将其用于查找和替换。

这可以使用

perl -i.bak  -p -e 's/old/new/g;' *.config

格式?

【问题讨论】:

  • 看起来你在摆弄 XML。是吗?如果是这样,可能有一个XML::Twig 一个班轮。

标签: perl


【解决方案1】:

试试这个:

perl -i.bak -pe 's/\d+\.\d+\.\d+\.1000\b/1000/g' *.config

【讨论】:

  • 那么我在哪里添加替换?
  • $line =~ s/\(.*)\/\$version\/; $line =~ s/\(.*)\/\$revision\/;
  • 'replace string' 已在我的 sn-p 中声明。替换骨架是s///
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-15
  • 1970-01-01
  • 2010-09-07
  • 2016-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多