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