XML 파일에서 텍스트 블록 추출

XML 파일에서 텍스트 블록 추출

다음 내용이 포함된 파일이 있습니다.

<People>
    <Person>
       <Name>Joe Blogs</Name>
       <Address>55 Oxford St</Address>
       ...lots of other properties
    </Person>
    <Person>
       <Name>Jane Pearson</Name>
       <Address>100 Samson St</Address>
       ...lots of other properties
    </Person>
</People>

내가 사용할 수 있는 유일한 도구는 awk, sed, grep, pcre_grep입니다.

각 "Person" 태그의 내용을 추출하고 "Name" 행을 제거한 후 블록의 md5를 계산하고 싶습니다.

내가 지금까지 시도한 것 :

awk '/<Person>/,/<\/Person>/{print $0}' input.xml | md5sum

그러나 이는 md5만 반환합니다. 각 블록에는 하나가 없습니다.

답변1

다음 awk 스크립트를 사용해 보세요:

awk '
/<Person>/,/<\/Person>/{
    if (! /<Name>/)
        a=a s $0
    s="\n"
    }
/<\/Person>/{
    system("echo \""a"\" |md5sum - ")
    a=s=""
    }' input.xml

설명하다:

  • 태그 사이의 모든 줄을 변수 Person로 수집a
  • 끝 표시가 충족되면 빈 변수 /Person대신 시스템 명령 호출a

답변2

다음과 같이 sed를 사용하십시오

 sed -n  '/^ *<Person> *$/,/^ *<\/Person> *$/{/<Name>/{d};p}' file|md5sum

의 모든 행을 타겟팅합니다 *<Person> *$/,/^ *<\/Person> *.

/<Name>/범위에 "이름"이라는 레이블이 있는지 확인하고 이 줄을 삭제하세요. 그런 다음 라인 범위가 인쇄되어 md5sum으로 파이프됩니다.

관련 정보