>

샘플 XML은 다음과 같습니다 :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
  <level01>
    <field01>AAAAAAAAAAAAAAAAAAAA</field01>
    <field02>BBBBBBBB</field02>
    <field03>CCCCCCCCCCCCCCCCCCCC</field03>
    <field04>DDDDDDDDDDDDDDDDDDDD</field04>
    <field05>DDD</field05>
    <level02>
      <field01>EEEEEEEEE</field01>
      <field02>FFF</field02>
      <field04>GGGGGGGGGGs</field04>
      <field05>HHH</field05>
      <level03>
        <field01>IIIIIIIII</field01>
        <field02>JJJ</field02>
        <field04>KKKKKKKKK</field04>
        <field05>L</field05>
      </level03>
    </level02>
  </level01>
</root>

원하는 출력은 다음과 같습니다 :

AAAAAA,BBBBB, CCCCCCCCCCCCC ,DDDDDDDDDD ,DDD,EEE,FFF,GGGG,HHH,III,JJJ,KKK,L

  • 답변 # 1

    xml2starlet 대신 xml2 (데비안 및 대부분의 다른 배포판 용 패키지로 제공) 사용 awk 와 함께  그리고 paste :

    $ xml2 <sdfsdf.xml | awk -F= '{ print $2 }' | paste -sd,
    AAAAAAAAAAAAAAAAAAAA,BBBBBBBB,CCCCCCCCCCCCCCCCCCCC,DDDDDDDDDDDDDDDDDDDD,DDD,EEEEEEEEE,FFF,GGGGGGGGGGs,HHH,IIIIIIIII,JJJ,KKKKKKKKK,L
    
    

    각 쉼표 뒤에 공백을 원하면 sed 를 사용하여 공백을 추가하십시오. :

    xml2 <sdfsdf.xml | awk -F= '{ print $2 }' | paste -sd, | sed -e 's/,/, /g'
    
    

    cut   awk 대신에 일할 수도 있습니다  하지만 아직 언급하지 않은 다른 기준이 있다고 생각하므로 awk 를 고수하겠습니다.  지금은 어쨌든 여기 cut 가 있습니다  버전 :

    xml2 <sdfsdf.xml | cut -d= -f2 | paste -sd,
    
    

  • 답변 # 2

    xmlstartlet인수는 약간 까다 롭습니다. 당신은 볼 필요가 xsl 방식으로 템플릿 (-t)으로 ...

    xmlstarlet sel -B -t -m '//text()' -c 'concat(.,",")' x1.xml
    
    

    where :

    -B : 일반적으로 공백 제거

    -t : xsl 의미의 템플릿

    -m : xpath exp와 일치

    -c : xpath exp의 사본

    이 표현식은 추가 ","를 생성합니다. 당연히 우리는 정상을 사용할 수 있습니다 유닉스 도구 :

    xmlstarlet sel -B -t -v '//text()' x1.xml | 
        sed -z 's/\n/, /g; s/$/\n/'
    
    

    -t : 템플릿 (xsl 의미)

    -v : 가치 (xpath 표현)

    sed ... 트림하기

관련 자료

  • 이전 sysfs - cgroup의 장치 매개 변수를 삭제하는 방법은 무엇입니까?
  • 다음 xrandr - LVDS 화면에서만 항상 Conky 표시