다음 내용이 포함된 파일이 있습니다.
<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으로 파이프됩니다.