쉘 스크립트가 있습니다
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 파서를 사용해야 합니다.