次の内容を含むファイルがあります。
<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つはありません。
答え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にパイプされます。