Pra*_*rni 1 regex variables perl replace
基本上,我试图在文本文件中插入一行,并且生成一个系统命令来执行“ perl -pi.orig -e”
这是我想做的事情:
my $find='# Foo Bar'
my $replace="foo/bar/blah.txt\n# Foo'
my $file = './some_text_file.txt'
system("perl -pi.orig -e 's|$find|$replace|;' $file");
Run Code Online (Sandbox Code Playgroud)
这在不使用变量的情况下有效。
$ file中包含以下文本:
# Foo Bar is a comment
then/a/path/to/a/file.txt
Run Code Online (Sandbox Code Playgroud)
不要从Perl调用Perl,直接在一个过程中完成工作。
#! /usr/bin/perl
use warnings;
use strict;
my $find = qr/# Foo/;
my $replace = "foo/bar/blah.txt\n# Foo";
my $file = './some_text_file.txt';
open my $in, '<', $file or die $!;
open my $out, '>', "$file.new" or die $!;
while (<$in>) {
s/$find/$replace/;
print {$out} $_;
}
close $out;
rename "$file.new", $file or die "Can't rename";
Run Code Online (Sandbox Code Playgroud)
或者,如果您需要保留备份,
rename $file, "$file.backup" or warn "Can't create backup";
rename "$file.new", $file or die "Can't rename";
Run Code Online (Sandbox Code Playgroud)