BashスクリプトからXMLタグ値の一部を抽出する方法

BashスクリプトからXMLタグ値の一部を抽出する方法

次のXMLファイルがあります(A.xml)。

<?xml version="1.0"?>
<RunParameters xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <RunParametersVersion>NextSeq_4_0_0</RunParametersVersion>
  <ReagentKitSerialWasEnteredInBaseSpace>false</ReagentKitSerialWasEnteredInBaseSpace>
  <ExperimentName>210913-RUN61-COCO</ExperimentName>
  <PurgeConsumables>false</PurgeConsumables>
  <MaxCyclesSupportedByReagentKit>92</MaxCyclesSupportedByReagentKit>
  <ModuleName />
  <ModuleVersion />
</RunParameters>

RUN61XMLタグポートを含むbash変数を設定したいと思います<ExperimentName>210913-RUN61-COCO</ExperimentName>。タグ値は常に次のような構造を持ちます。

重要ではない -関連-関係ない

ダッシュで区切ってください。

grep私は良い結果なしで試しました。

runNumber=$(grep -o '<ExperimentName>.*</ExperimentName>' | cut -d '-' -f2 A.xml)

何をすべきか知っていますか?

ベストアンサー1

構造化データを扱うため、専用パーサーを使用する必要があります。たとえば、次のxmlstarletタグ値を抽出する必要がありますcut

xmlstarlet sel -t -c "string(/RunParameters/ExperimentName)" A.xml | cut -d- -f 2

だから、あなたは使用することができます

runNumber=$(xmlstarlet sel -t -c "string(/RunParameters/ExperimentName)" A.xml | cut -d- -f 2)

おすすめ記事