명령줄에서 노드 내 XML 파일의 텍스트를 바꾸는 정규식

명령줄에서 노드 내 XML 파일의 텍스트를 바꾸는 정규식

XML 파일이 있고 g:gtin 노드의 여러 인스턴스에서 여는 태그와 닫는 태그 사이의 모든 항목을 아무것도 바꾸지 않으려고 합니다.

sed나 이와 유사한 것을 사용하여 명령줄에서 이 작업을 수행할 수 있습니까?

<g:gtin>31806831001</g:gtin>

답변1

간단한 상황에 대한 간단한 솔루션 - 내 의견을 참조하세요.

echo "<g:gtin>31806831001</g:gtin>" | sed 's|<g:gtin>.*</g:gtin>|<g:gtin></g:gtin>|'

결과:

<g:gtin></g:gtin>

시작 태그와 끝 태그가 같은 줄에 있고 줄에 태그가 하나만 있다는 가정에 따라 달라집니다.

xml 파일은 일반적으로 동일한 방식으로 반복해서 생성되므로 이 가정이 사실일 수 있습니다.

답변2

그것을 사용하는 한 가지 방법 perl:

콘텐츠 script.pl:

use warnings;
use strict;
use XML::Twig;

die qq[Usage: perl $0 <xml-file>\n] unless @ARGV == 1;

my $twig = XML::Twig->new(
    twig_roots => { 
        q[g:gtin] => \&handle_gtin,
    },  
    twig_print_outside_roots => 1,
);

$twig->parsefile( shift );

sub handle_gtin {
    my ($t, $gtin) = @_; 
    $gtin->set_text( q[] );
    $gtin->print;
}

다음과 같이 실행하세요:

perl script.pl file.xml

관련 정보