Perl:通过替换在文件中插入数组元素
Perl: insert elements of array in file by substitution
1) 我有一个文本文件。该文件包含需要用多行替换的字符串,这些行是数组的元素。
文件内容:
line 1
line 2
line 3
STRING
line 4
...
2.)我有一个数组
@array = qw (ele1 ele2 ele3);
这个数组可以有 2 个或更多元素。
3.)我想打开文件,用以下伪代码替换字符串:
s/STRING/@array/;
并将结果写入新文件。
4.) 带有结果的新文件应如下所示:
line 1
line 2
line 3
ele1
ele2
ele3
line 4
...
这里是一段伪代码:
open (FILE "< file.txt");
open (OUTPUT "> new.txt");
@array=qw(ele1 ele2 ele3);
for $line (<FILE>) {
s/STRING/@array/;
print OUTPUT "$line\n";
}
close FILE;
close OUTPUT;
关于如何使用替换将数组元素插入此文件有什么建议吗?
我不是在寻找基于 sed
、awk
、cat
或 Unix shell 工具的解决方案。
你可以这样做:
my $str = "line 1
line 2
line 3
STRING
line 4";
my @array = qw (ele1 ele2 ele3);
$str =~ s/STRING/join"\n",@array/e;
say $str;
输出:
line 1
line 2
line 3
ele1
ele2
ele3
line 4
您实际上可以在没有 /e
运算符的情况下执行此操作,使用 $"
变量($LIST_SEPARATOR
如果您使用英语),这会改变数组插入字符串时的连接方式(包括 s///
):
的右侧
$" = "\n";
@array = qw(ele1 ele2 ele3);
open FILE, 'file.txt';
open OUTPUT, '>', 'new.txt';
while (<FILE>) {
s/^STRING$/@array/;
print OUTPUT;
}
另请注意,如果您不希望正则表达式匹配包含 单词 的行,则需要在正则表达式上使用 ^
和 $
锚点23=].
你也可以使用onliner
perl -pi -e '@a=qw(a b c d e);$aa=join("\n",@a);s/string/$aa/g;' tt.txt
1) 我有一个文本文件。该文件包含需要用多行替换的字符串,这些行是数组的元素。
文件内容:
line 1
line 2
line 3
STRING
line 4
...
2.)我有一个数组
@array = qw (ele1 ele2 ele3);
这个数组可以有 2 个或更多元素。
3.)我想打开文件,用以下伪代码替换字符串:
s/STRING/@array/;
并将结果写入新文件。
4.) 带有结果的新文件应如下所示:
line 1
line 2
line 3
ele1
ele2
ele3
line 4
...
这里是一段伪代码:
open (FILE "< file.txt");
open (OUTPUT "> new.txt");
@array=qw(ele1 ele2 ele3);
for $line (<FILE>) {
s/STRING/@array/;
print OUTPUT "$line\n";
}
close FILE;
close OUTPUT;
关于如何使用替换将数组元素插入此文件有什么建议吗?
我不是在寻找基于 sed
、awk
、cat
或 Unix shell 工具的解决方案。
你可以这样做:
my $str = "line 1
line 2
line 3
STRING
line 4";
my @array = qw (ele1 ele2 ele3);
$str =~ s/STRING/join"\n",@array/e;
say $str;
输出:
line 1
line 2
line 3
ele1
ele2
ele3
line 4
您实际上可以在没有 /e
运算符的情况下执行此操作,使用 $"
变量($LIST_SEPARATOR
如果您使用英语),这会改变数组插入字符串时的连接方式(包括 s///
):
$" = "\n";
@array = qw(ele1 ele2 ele3);
open FILE, 'file.txt';
open OUTPUT, '>', 'new.txt';
while (<FILE>) {
s/^STRING$/@array/;
print OUTPUT;
}
另请注意,如果您不希望正则表达式匹配包含 单词 的行,则需要在正则表达式上使用 ^
和 $
锚点23=].
你也可以使用onliner
perl -pi -e '@a=qw(a b c d e);$aa=join("\n",@a);s/string/$aa/g;' tt.txt