2012-05-11 4 views
1

저는 xmllint를 사용하여 rss를 구문 분석하는 작은 스크립트를 작성하고 있습니다.Bash 스크립트 및 xml/rss 구문 분석

ITEMS=`echo "cat //title" | xmllint --shell rss.xml ` 
echo $ITEMS > tmpfile 

을하지만 반환 :

지금 난 다음 명령을 사용하여 제목 목록을 가져

<title>xxx</title> ------- <title>yyy :)</title> ------- <title>zzzzzz</title> 

줄 바꿈없이, 또는 공간. 지금 난 단지 제목 태그의 텍스트 내용에 관심이, 그리고 내가 사용하여 제목을 탐색 할 수있는 경우에 대한/루프, 뭔가 같은 동안 : 그것은

for val in $ITEMS 
do 
     echo $val 
done 

을 수행 할 수 있습니까? 미리 감사드립니다.

+1

python, ruby, 세계의 다른 언어 (perl)의 스크립트 언어를 사용하십시오 (선호하는 순서대로 : P) – KurzedMetal

+2

@KurzedMetal 충분히 할 수 있습니다. 구문 분석 및 분할 및 반복 bash에서. –

+0

변수를 인용하면 많은 도움이 될 것입니다 : 'for val ""$ ITEMS "; echo "$ val"; done' –

답변

3

필자는 bash에서 xml을 구문 분석하기 위해 어느 시점에서 동일한 유형의 요구 사항을 가졌습니다. 설치가 가능한 xmlstarlet http://xmlstar.sourceforge.net/을 사용하여 종료되었습니다.

하지 않으면, 그런 일이 surounding 태그를 제거합니다 :

echo "cat //title/text()" | xmllint --shell rss.xml 

그런 다음 당신이 정리에 필요한 출력을 배관 후, 염기성 용액은 다음과 같습니다

echo "cat //title/text()" | xmllint --shell rss.xml | egrep '^\w' 

희망이 도와 드리겠습니다.

2

$ITEMS과 인용 부호없이 사용하면 echo을 사용하므로 개행 문자가 제거됩니다. 가장 예기치 않은 공백 또는 기타 인쇄 할 수없는 문자를 생성하지 않습니다 항목에 남아있는 for 루프를 사용하여, 일반적으로

ITEMS=`echo "cat //title" | xmllint --shell rss.xml ` 
echo "$ITEMS" > tmpfile 
#----^------^--- dbl-quotes only 

을보십시오. for i in {1..10} ; do echo $i; done

같은 (비 영숫자), 그리고 당신이 정말로 변수, 또는 임시 파일이 필요하지 않습니다, 당신의 RRS 피드에 무엇에 따라

echo "cat //title" | xmllint --shell rss.xml | 
    while read line ; do 
     echo "$line" 
    done 

을 시도, 당신은 또한 변경 혜택을 누릴 수 있습니다 읽기에 cmd에서 사용하는 기본 IFS (내부 필드 구분 기호),

while IFS= read line .... 
# or 
while IFS="\n" read line 
# or 
while IFS="\r\n" read line 

난 당신이 xmllint가 들어가 echo "cat //title" | 무엇을 달성하고 싶은지 모르겠어요, 그래서 같이 내가 떠날거야보십시오. 그것은 xmllint에 대한 지시입니까? 또는 문서에 대한 헤더를 만들기 위해 통과 시켰습니까? (지금 xmllint를 경험하지 마십시오.)

또한 reading rss feeds with awk을보고 싶을 수도 있지만 다소 낮은 수준입니다.

이 정보가 도움이되기를 바랍니다.

+0

예는 xmllint에 대한 지시입니다. 제가 제공 한 예제에서 빠져있는 charcater를 발견했기 때문에 질문을 업데이트했는지 확인하십시오. 고마워요 : D – Ivan

+0

귀하의 새로운 게시와 내가 당신의 기본 명령으로 사용하는 다른 무엇이 다른 것을 보지 못합니다. cmd 또는 샘플 전류 출력이 변경 되었습니까? ** 또한 내 대답에 편집을 추가하고 있습니다. 잠시 후 다시 확인하십시오. ** 행운을 빈다. – shellter

+0

@Ivan은 제 수정 작업을 완료했습니다. 행운을 빕니다. – shellter