여러 줄이 있을 때 다른 파일의 텍스트를 사용하여 텍스트 파일에서 자리 표시자를 제거하는 방법은 무엇입니까?

여러 줄이 있을 때 다른 파일의 텍스트를 사용하여 텍스트 파일에서 자리 표시자를 제거하는 방법은 무엇입니까?

파일이 있습니다:

  - id: 1.4.25.2
    name: 'Configuring a VNC Server'
    permalink: '/rhcsa/managing-network-services/configuring-vnc-access/configuring-a-vnc-server'
    description: '<*description>'
    content: []
  - id: 1.4.25.3
    name: 'Connecting to a VNC Server'
    permalink: '/rhcsa/managing-network-services/configuring-vnc-access/connecting-to-a-vnc-server'
    description: '<*description>'
    content: []

<*description>각 콘텐츠를 일부 텍스트로 바꿔야 합니다 . 당연히 정규식을 사용하려고 생각했습니다. 분명히 (이 사이트의 일부 답변에 따르면) sed교체에 대한 탐욕스럽지 않은 수정자는 없습니다. 그래서 Perl을 사용해 보았습니다.

(.*id: 1\.4\.25\.2(?:\n|.)*)\'(\<\*description\>)\'

필요한 부분을 선택하지 않으면 해당 부분은 yaml 배열의 다음 요소(라인 앞) - id: 1.4.25.2까지 나옵니다 . 이 작업을 수행하는 방법과 다른 곳에서 가져온 사용자 정의 텍스트를 사용하여 파일의 각 항목에 대한 설명을 변경하는 방법을 알 수 없습니다!description: '<*description>'\ncontent: []- id: 1.4.25.3

답변1

YAML 모듈을 사용하면 데이터 구조를 재귀적으로 탐색하고 일치하는 요소를 표준 입력에서 읽은 줄로 바꿉니다.

#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
use YAML::Tiny;

my $yaml =
  YAML::Tiny->read( $ARGV[0] // die "Usage: $0 yaml-file [out-file]\n" );

mangle_description( $yaml->[0] );

$yaml->write( $ARGV[1] // "$ARGV[0].out" );

sub mangle_description {
    my $what = shift;
    my $type = ref $what;
    if ( $type eq 'HASH' ) {
        for my $key ( keys %$what ) {
            if ( $key eq 'description'
             and $what->{$key} eq '<*description>' ) {
                $what->{$key} = set_description();
            }
            mangle_description( $what->{$key} ) if ref $what->{$key};
        }
    } elsif ( $type eq 'ARRAY' ) {
        for my $entry (@$what) {
            mangle_description($entry);
        }
    } else {
        warn Dumper $what;
        die "unknown type in YAML ??\n";
    }
}

sub set_description {
    my $next = readline *STDIN;
    chomp $next;
    return $next;
}

parser위의 내용은 다음 위치에 유효한 YAML 로 저장됩니다 input.

$ yes | perl parser input
$ grep description input.out
    description: y
    description: y
$ 

관련 정보