2013-08-10 6 views
1

명령 줄 도구의 출력을 구문 분석하려고합니다. XML을 직접 STDOU으로 출력하고이를 구문 분석하려고합니다.Bash : grep 패턴을 사용하여 명령 출력을 구문 분석합니다.

  • 이 도구는 다음과 같은 전체 XML 문서 출력 :

enter image description here

내 목표는 그 출력을 구문 분석하고 <date> 태그 사이에있는 문자열하는 것입니다 만,이 문서 때문에 수도 <date> 태그가 포함 된 경우 이어야하며 다음에 오는 <date> 만 선택하면됩니다. (그리고 거기에 새로운 라인/공간이있는 어수선한 상황입니다).

현재 나는 다음과 같은 명령을 사용하여이 문제를 해결 해요 :

tool... | grep -A1 '<key>SULastCheckTime</key>' | grep 'string.$' | sed -e 's,.*<date>\([^<]*\)</date>.*,\1,g' 

그것은 잘 작동하지만 당신이 볼 수있는 그리고 더 나은 아무것도 쓸 수있는 매우 지저분한입니까? 더 잘할 수 있도록 도와 주실 수 있습니까?

고맙습니다!

추신 : 나는 OSX에서 이렇게하고 있기 때문에, 새로운 GNU grep 옵션이 없습니다. btw에 의한 bash 버전은 3.2.48 (1)입니다. 그리고 ... 더 나은 방법으로 XML을 구문 분석 할 수있는 다른 도구를 설치할 여유가 없습니다.

답변

1

어쩌면 이렇게 될까요? 빨리 내 지저분한 솔루션보다

$ cat foo.input 
foo 
foo 
    <key>some key</key> 
    <date>some date</date> 
bar 
bar 
    <key>SULastCheckTime</key> 
    <date>2013-08-10T00:27:40Z</date> 
quux 
quux 

$ awk '/<key>SULastCheckTime<\/key>/ { toggle=1 } toggle && /<date>.*<\/date>/ { gsub(/<[^>]*>/, "", $1); print; exit }' foo.input 
2013-08-10T00:27:40Z 
+1

방법. 팁 주셔서 감사합니다. ;) – TCB13