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>

second.txt 파일의 데이터는 first.txt 파일의 데이터와 아무 관련이 없습니다.

답변1

이것이 가능한 대답 중 하나입니다. 하지만 저는 펄을 사용합니다. 두 번째 파일에서는 빈 줄을 확인하지 않습니다. 그리고 대체품은 하드코딩되어 있습니다.

#!/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";
}

관련 정보