![XML 파일에서 값 가져오기 - 요구 사항: bash/Unix에서 수행되어야 함 [닫기]](https://linux55.com/image/32561/XML%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EA%B0%92%20%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0%20-%20%EC%9A%94%EA%B5%AC%20%EC%82%AC%ED%95%AD%3A%20bash%2FUnix%EC%97%90%EC%84%9C%20%EC%88%98%ED%96%89%EB%90%98%EC%96%B4%EC%95%BC%20%ED%95%A8%20%5B%EB%8B%AB%EA%B8%B0%5D.png)
다음은 내 XML 파일에서 발췌한 내용입니다.
<Value ProtectInMemory="True"> ytznnyg</Value><Value>arulmdbqtza01 </Value><Value>arulmrms </Value><Value>sys/system</Value>
<Value ProtectInMemory="True">kylfpo8</Value><Value>arulmdbqtza02 </Value><Value>arulmrib </Value><Value>sys/system </Value>
<Value ProtectInMemory="True" /><Value>arulmdbsoaa01 </Value><Value>arulmsoa</Value><Value />
<Value ProtectInMemory="True" /><Value>arulmdbsoaa01 </Value><Value>srulmsoa</Value><Value />
지금 내가 원하는 것:
ytznnyg;arulmdbqtza01;arulmrms;sys/system
kylfpo8;arulmdbqtza02;arulmrib;sys/system
;arulmdbsoaa01;arulmsoa;
;arulmdbsoaa01;srulmsoa;
가장 좋은 방법은 4개의 서로 다른 변수에서 세미콜론으로 값을 구분하는 것입니다.
놀랍게도 다음과 같은 출력이 있습니다.
connect sys/ytznnyg@arulmdbqtza01:1521/arulmrms as sysdba @coucou.sql
disconnect
connect system/ytznnyg@arulmdbqtza01:1521/arulmrms @coucou.sql
disconnect
connect sys/kylfpo8@arulmdbqtza02:1521/arulmrib as sysdba @coucou.sql
disconnect
connect system/kylfpo8@arulmdbqtza01:1521/arulmrib @coucou.sql
disconnect
connect /@arulmdbsoaa01:1521/arulmsoa as sysdba @coucou.sql
disconnect
connect /@arulmdbsoaa01:1521/arulmsoa @coucou.sql
disconnect
connect /@arulmdbsoaa01:1521/srulmsoa as sysdba @coucou.sql
disconnect
connect /@arulmdbsoaa01:1521/srulmsoa @coucou.sql
disconnect
답변1
bash
명령줄을 해석하고 명령을 실행하는 도구인 셸입니다. 작업을 수행하려면 명령이나 무언가를 호출해야 합니다. 이는 xmlstarlet
XSLT 처리 에 사용됩니다 .
sed '1s|^|<x>|;$s|$|</x>|' < your-file.xml |
xmlstarlet sel -t -v '//Value' |
tr -d ' ' |
paste -sd ';;;\n' -
위는 4개의 명령을 병렬로 실행하여 작업을 실행하는 코드입니다 bash
(실제로는 Bourne 또는 POSIX 쉘 코드이므로 Bourne과 같은 쉘뿐만 아니라 모든 Bourne 유사 쉘에서 해석 가능합니다). bash
그중 , sed
및 tr
는 paste
표준 POSIX 명령이므로 대부분의 Unices에서 찾을 수 있습니다. xmlstarlet
설치해야 할 수도 있습니다.