複数の要求XMLフラグメントを含むログファイルがあります。この sed コマンドを使用して、要求 XML を抽出して印刷します。
sed -n '/<GetCompensableProductIdentification*/,/<\/GetCompensableProductIdentification>/p' ProductIdentifierService.log
必要なリクエストをフィルタリングできるように、リクエストの開始タグと終了タグに変数を使用したいと思います。どうすればいいですか?
答え1
これはあなたに役立ちます。
sed -n 's,.*<GetCompensableProductIdentification>\(.*\)</GetCompensableProductIdentification>.*,\1,p' input
xmlstarlet
しかし、この状況では有効なツールだと思います。
xmlstarlet sel -t -v '//GetCompensableProductIdentification' -n
答え2
このスクリプト
sed -n '/<GetCompensableProductIdentification>/,/<\/GetCompensableProductIdentification>/p' ProductIdentifierService.log
これをしなければならない
ここのオプションは-n
通常の出力を抑制します。したがって、選択した内容だけが印刷されます。
変数を使用するには、次のものを使用できます。[シェルパラメータの置換]。
start_tag="<GetCompensableProductIdentification>"
end_tag="${start_tag/#</<\\/}"
sed -n "/${start_tag}/,/${end_tag}/p" ProductIdentifierService.log
これはあなたがスクリプトを書くように誘惑するでしょう
# Script name - xmlparser.sh
#!/usr/bin/env bash
start_tag="$1"
end_tag="${start_tag/#</<\\/}"
if [ -e "$2" ] # Extra check if file exists
then
sed -n "/${start_tag}/,/${end_tag}/p" "$2"
else
echo " The file : $2 doesn't exists"
fi
次のようにスクリプトを実行します。
./xmlparser.sh "<GetCompensableProductIdentification>" "/path/to/log/file"