내 XML 파일의 형식은 다음과 같습니다. <fullName>..</fullName>
ABC와 DEF 태그 사이의 값을 얻고 싶습니다 . fullName
다른 변수에서 각 xml 태그의 값을 가져와야 하기 때문에 각 행에 도달하기 위해 while 루프에서 이 코드를 작성하고 있습니다 . grep
모든 값이 함께 표시됩니다.
감사해요
<fields>
<fullName>ABC</fullName>
<trackFeedHistory>false</trackFeedHistory>
<type>TY</type>
</fields>
<fields>
<fullName>DEF</fullName>
<trackFeedHistory>false</trackFeedHistory>
<type>XY</type>
</fields>
답변1
다음과 같은 XML 파서를 사용하십시오.xmlstarlet
:
xmlstarlet sel -t -m '//fields' -v 'fullName' -n file
파일 은 xml
유효해야 하지만 루트 태그가 없기 때문에 예제에서는 작동하지 않습니다. 위 명령과 함께 다음이 사용됩니다.
<root>
<fields>
<fullName>ABC</fullName>
<trackFeedHistory>false</trackFeedHistory>
<type>TY</type>
</fields>
<fields>
<fullName>DEF</fullName>
<trackFeedHistory>false</trackFeedHistory>
<type>XY</type>
</fields>
</root>
산출:
ABC
DEF
@roaimas 님의 댓글 덕분에 필드 개수를 모르고 for
루프를 생성했는데 결과는 다음과 같습니다.xmlstarlet
numFields=$(xmlstarlet sel -t -m '//fields' -o "." file | wc -c)
for i in $(seq 1 $numFields); do
var=$(xmlstarlet sel -t -m "//fields[$i]" -v "fullName" file)
printf '%s\n' "$var" # or do something else
done