XMLが書き込まれるログファイルがあります。すべてのノードに特定の文字列を持つすべてのXMLを検索して抽出する必要があります。
たとえば、ログファイルには検索パラメータを含む複数のXMLがあります。
randomlogentry1
randomlogentry2
Printing XML:<CreateDataABC>
<Tag1>searchparam</Tag1>
</CreateDataABC>
randomlogentry3
randomlogentry4
randomlogentry5
Printing XML: <DataCreatedABC>
<TagA>otherparam</TagA>
<TagB>searchparam</TagB>
<TagC>otherparam</TagC>
</DataCreatedABC>
randomlogentry6
randomlogentry7
予想される出力は、コンソールに印刷されるか、別々のファイルに書き込まれた2つのXMLです。
XML1:
<CreateDataABC>
<Tag1>searchparam</Tag1>
</CreateDataABC>
XML2:
<DataCreatedABC>
<TagA>otherparam</TagA>
<TagB>searchparam</TagB>
<TagC>otherparam</TagC>
</DataCreatedABC>
XML内の「searchparam」の位置は固定されておらず、唯一の定数は「ABC」文字列と「searchparam」です。
sedを使用して2行の番号の間の内容を抽出したいと思います。以下を試しました。
- 検索パラメータを検索し、行番号を識別します。
- ABCの次の発生を見つけて、番号を取得します。
特定の行で以前に発生したABCが見つからないようです。
前にこのようなことをした人はいますか?
編集:サンプルログ形式と予想される出力が更新されました。
ベストアンサー1
この試み:
Max=`grep -c "^Printing" file.xml`
for count in `seq 1 $Max`
do
sed -nr '/Printing/H;//,/ABC/G;s/\n(\n[^\n]*){'$count'}$//p' file.xml | sed 's/Printing XML://' > $count.xml
done