シェルスクリプトがあります
string=<deploymentTargets xmi:type="appdeployment:ClusteredTarget" xmi:id="ClusteredTarget_143378365
7353" name="cluster1"/>
name="
との間で私が望む値は"/>
Cluster1です。この出力は他の変数に保存する必要があります。
答え1
GNU grepを使用してください:
a="$(grep -oP 'name="\K[^"]*(?="/>)' file)"
echo "$a"
GNU sedの使用:
a="$(sed -E 's|.*name="([^"]*)"/>.*|\1|' file)"
echo "$a"
出力:
クラスタ1
答え2
示された特定の例では、これらはすべてcluster1
変数に保存されます$name
。
sed
name=$(sed 's/.*="\(.*\)".*/\1/' <<<$string )
GNU
grep
(PCREサポートでコンパイル済み)name=$(grep -oP '[^"]+(?="/>)'<<<$string )
パール
name=$(perl -pe 's/.*="(.*)".*/\1/' <<<$string )
あなたがこの<<<
キャリアをサポートしてはいけない場合は、好みの方法を変更するか、printf
代わりecho
に次のものを使用してください。
name=$(printf '%s' "$string" | sed 's/.*="\(.*\)".*/\1/')
name=$(printf '%s' "$string" | grep -oP '[^"]+(?="/>)')
name=$(printf '%s' "$string" | perl -pe 's/.*="(.*)".*/\1/')
重要:これだろうただ表示された例に従ってください。ネストされたタグなどを含むより複雑なXML構造の場合は、専用のXMLパーサーを使用する必要があります。