使用 awk/sed 将模式替换为文件中的行

使用 awk/sed 将模式替换为文件中的行

first.html我有一个包含以下代码的文件:

<tr>
<td class="headerValue">One</td>
</tr>
<tr>
<td class="headerValue">Two</td>
</tr>

现在我有另一个文件second.txt,其中包含一些值,例如:

hahaha
hehehe

我想用第二个文件中的值替换每次出现的“headerValue”中的值。

例如。更换后将first.html变成

<tr>
<td class="headerValue">hahaha</td>
</tr>
<tr>
<td class="headerValue">hehehe</td>
</tr>

文件 secondary.txt 中的数据与文件 first.txt 中的数据无关

答案1

这是一个可能的答案。不过我用的是perl。它不会检查第二个文件中的空行。并且替换是硬编码的。

#!/usr/bin/perl
#
use strict;

# subroutine to load a test file into an array
sub load{
   my $file = shift;
   open my $in, "<", $file or die "unable to open $file : $!";
   my @data = <$in>;
   chomp @data;
   foreach (@data) { s/\cM//g;}
   return @data;
}


my $first = shift || die "usage: $0 [first] [second]\n";
my @first_data = &load($first);
my $second = shift || die "usage: $0 [first] [second]\n";
my @second_data = &load($second);

my $i = 0;
foreach( @first_data )
{
    if( s{(<td class="headerValue">)(.*?)(</td>)}{$1$second_data[$i]$3} )
    {
        $i++;
    }
    print "$_\n";
}

相关内容