想要使用perl脚本在文件中添加新行。我试过但没有运气
if($correctedContents[$i] ~= /second line/){
@data = $correctedContents[$i]
push (@data, '\n TEST Line');
例如:每当找到“第二行”行时,将“TEST Line”添加到文件中。
FILE1.TXT,
first line
second line
third line
first line
second line
third line
.....
添加新行后 预期产出:
first line
second line
TEST Line
third line
first line
second line
TEST Line
third line
先谢谢
答案 0 :(得分:2)
您还没有向我们展示足够的代码,以便我们提供更多帮助。但是,特别是,您没有显示将更改的数据写回输出文件的任何代码。
一般来说,这样的任务归结为三个阶段:
一种常见的方法是打开两个文件句柄 - 一个用于输入文件,另一个用于新的输出文件。这使得一次处理文件变得简单。
while (<$input_fh>) {
if (this is a line you need to change) {
# make changes to line (which is in $_)
# Perhaps print an extra line here.
}
print $output_fh $_;
}
另一种方法(易于使用的速度)是使用Tie::File模块(自5.8以来所有Perl发行版的一部分)。
与往常一样,Perl FAQ是获取更多信息的好地方。在这种情况下,您可能希望查看perlfaq5,其中包含问题How do I change, delete, or insert a line in a file, or append to the beginning of a file?
更新:您已经有一个(稍有问题)基于Tie :: File的解决方案。所以这是我的:
#!/usr/bin/perl
use strict;
use warnings;
use Tie::File;
tie my @lines, 'Tie::File', 'somefile.txt'
or die "Can't tie file: $!\n";
for (@lines) {
$_ .= "\nTEST line" if $_ eq 'second line';
}
答案 1 :(得分:0)
您可以使用Tie::File
获得您期望的输出
use Tie::File;
my $inputFile = "test.txt";
my @array;
tie @array, 'Tie::File', $inputFile or die "Error: Couldn't tie the \"$inputFile\" file: $!";
my $len = join "\n", @array;
if($len=~m/second line/i) { $len=~s/second line/$&\nTEST Line/ig; }
@array = split/\n/, $len;
untie @array;
Tie::File
将替换同一输入文件中的字符串。