sed 或 awk 获取字符串

sed 或 awk 获取字符串

我有一个 shell 脚本

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

  1. sed

    name=$(sed 's/.*="\(.*\)".*/\1/' <<<$string )
    
  2. GNU grep(使用 PCRE 支持编译)

    name=$(grep -oP '[^"]+(?="/>)'<<<$string )
    
  3. Perl

    name=$(perl -pe 's/.*="(.*)".*/\1/' <<<$string )
    

如果您的不应支持该<<<运营商,请更改您的首选方法以使用printfecho改为:

name=$(printf '%s' "$string" | sed 's/.*="\(.*\)".*/\1/')
name=$(printf '%s' "$string" | grep -oP '[^"]+(?="/>)')
name=$(printf '%s' "$string" | perl -pe 's/.*="(.*)".*/\1/')

重要的: 这会仅有的根据您展示的示例进行操作。对于更复杂的 XML 结构,包括嵌套标签等,您确实应该使用专用的 XML 解析器。

相关内容