次の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>
RUN61
XMLタグポートを含む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)