XML 파일에서 행을 삭제하는 방법

XML 파일에서 행을 삭제하는 방법

xml 파일에서 한 줄만 삭제하는 방법(sed/awk 또는 perl을 사용하는 한 줄)

그것은 다음으로 시작됩니다:

<units> 

그리고 끝나는

</Networks>

다음과 같이

<units><unit ip= ............   </units><ranges/></Networks>

답변1

XML을 구문 분석하는 데 정규식을 사용하지 마세요. 이는 정규식을 깨뜨리는 XML을 사용하여 완벽하게 유효한 작업을 많이 수행할 수 있기 때문에 깨지기 쉬운 코드를 만드는 좋은 방법입니다. 완벽하게 유효한 방식으로 XML을 다시 형식화하는 것(예: 중첩/들여쓰기 형식으로 "예쁜 인쇄")은 코드를 손상시킵니다.

대신 XML 파서를 사용하는 것이 좋습니다. 개인적으로 나는 좋아한다XML::TwigPerl의 모듈.

<Networks>귀하의 의견은 XML의 요소에 콘텐츠를 추가 하려고 함을 나타냅니다 .

그렇다면 다음과 같은 것은 어떨까요?

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

use XML::Twig;

my $xml_text = '<XML>
<Networks><units><unit ip="1.2.3.4" /></units><ranges/></Networks>
</XML>';

my $parser = XML::Twig->new( 'pretty_print' => 'indented' );
#would probably use 'parsefile' instead here
$parser->parse($xml_text);

print "\nBefore:\n";
$parser->print;


#insert a new element into 'Networks':
$parser->root->first_child('Networks')->insert_new_elt(
        'last_child',     #position - end of "Networks" element
        'new_element',    #element
        {   'attribute_here'    => "value_here",
            'another_attribute' => 'another_value',
        },                 #attributes as key value pairs
        "Content_here",    #element content
    );


print "\nAfter:\n";
$parser->print;

답변2

이 시도:

perl -i -pe 's|^<units>.*</Networks>$||' /my/filename

줄에 선행 또는 후행 공백이 있는 경우 다음이 필요합니다.

perl -i -pe 's|^ *<units>.*</Networks> *$||' /my/filename

불필요한 탈출을 피하기 위해 슬래시 대신 파이프를 구분 기호로 사용합니다.

답변3

이로 인해 XML이 손상될 것이라는 점을 알고 있으므로 다음 중 하나를 사용하여 원하는 작업을 수행할 수 있습니다.

  1. 진주

    perl -ne 'print unless m#^<units>.*</Networks>$#' file.xml 
    perl -ne 'm#^<units>.*</Networks>$# ? next : print' file.xml 
    
  2. awk '!/^<units>.*<\/Networks>$/' file.xml 
    
  3. sed

    sed '/^<units>.*<\/Networks>$/d' file.xml 
    
  4. grep

    grep -Ev '^<units>.*<\/Networks>$' file.xml 
    
  5. Bash(및 zsh), 완료용

    while read -r line; do 
        [[ "$line" =~ ^\<units\>.*\<\/Networks\>$ ]] || printf "%s\n" "$line"
    done < file.xml 
    

관련 정보