Bash
sed 或 awk 獲取字元串
我有一個shell腳本
string=<deploymentTargets xmi:type="appdeployment:ClusteredTarget" xmi:id="ClusteredTarget_143378365 7353" name="cluster1"/>
我想要介於
name="
和之間的值"/>
是cluster1。此輸出應儲存到另一個變數。
對於您顯示的特定範例,所有這些都將保存
cluster1
在變數中$name
:
sed
name=$(sed 's/.*="\(.*\)".*/\1/' <<<$string )
- GNU
grep
(編譯時支持 PCRE)name=$(grep -oP '[^"]+(?="/>)'<<<$string )
- Perl
name=$(perl -pe 's/.*="(.*)".*/\1/' <<<$string )
如果您的 shall 不支持
<<<
運營商,請更改您首選的使用方法,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 解析器。
使用 GNU grep:
a="$(grep -oP 'name="\K[^"]*(?="/>)' file)" echo "$a"
使用 GNU sed:
a="$(sed -E 's|.*name="([^"]*)"/>.*|\1|' file)" echo "$a"
輸出:
集群1