2010-05-24 6 views
2

나는 HTML 파일을 가지고 있으며, <pre> </pre> 태그로 묶인 데이터에 관심이 있습니다. 이것을 달성 할 수있는 단 하나의 라이너가 있습니까?UNIX HTML 페이지 표시 태그 내용 - 한 개의 라이너?

샘플 파일 :

<html> 
<title> 
Hello There! 
</title> 
<body> 
<pre> 
John Working 
Kathy Working 
Mary Working 
Kim N/A 
</pre> 
</body> 
</html> 

출력이되어야합니다 :

John 
Kathy 
Mary 
Kim 

많은 감사들, 감사합니다!

답변

1

내 펄-FU가 약, 그러나 이것은 당신의 예를 들어 작동합니다

$ cat file.html | perl -e'while(<>){if(/<\/pre>/){$a=0;}if($a){print}if(/<pre>/){$a=1;}}' | cut -f1 -d' ' 
John 
Kathy 
Mary 
Kim 
+0

신난다, 그것은 작동한다! 그냥 호기심에서, 우리는 'sed'를 사용하여 동일하게 달성 할 수 있습니까? sed -n '/ pre/='file.txt (줄 번호를 가져옴) -> sed -n '76, 216p 'file.txt (위의 sed에서 가져온 인쇄 줄). 둘 모두 통합하는 방법? – ThinkCode

2

XHTML을 사용하는 경우 xmlstarlet을 사용하십시오. 그렇지 않으면 먼저 HTML Tidy를 통해 전달하고 XHTML로 변환하십시오.

+0

가 '나오지도'를 사용하는 솔루션이 있습니까? 감사합니다 .. – ThinkCode

4

twig tools에 손을 가져옵니다. 그 중 하나가 xml_grep이라는 것입니다.

cat foo.txt | xml_grep --nowrap pre 

prexpath 표현에 문제가 줄어 듭니다. 몇 가지 간단한 텍스트 처리가 뒤 따르고 XML이 다르게 형식화 된 경우에도 작동합니다.

조언의 글 - XML과 같은 구조화 된 데이터를 조작하기 위해 sed 및 기타 스트림 기반 텍스트 처리 도구를 사용하지 마십시오. 적절한 파서를 사용하십시오.

+1

훌륭한 도구처럼 들립니다. 설치 방법을 모르며 관리자가 내게 설치하도록 요청하고 싶지 않아서 일을 빠르고 쉽게 끝내기를 원합니다. 하나의 위로 :) – ThinkCode

+0

감사. 그래도 경고하십시오. 입력 내용이 약간 변경되면 원시 텍스트 기반 XML 구문 분석이 중단됩니다. –

2

는 특별히 흥미로운 라인 (정확히처럼 나타나는) <pre></pre>를 포함하는 라인 사이에 항상 가정하면 ... 나오지도를 사용하여 솔루션에 대한 질문부터하고 흥미로운 콘텐츠가 개방보다 같은 줄에 결코 없다는 것을 나 닫는 태그를 포함하고, 첫 번째 블록이 추출하려는 유일한 블록이라고 가정하고,이 문제를 해결하기 위해 이것이 실제로 the wrong way이라는 것을 이해하는 동안 여전히 그것을 원한다고 가정하면, 예를 들어 sed를 사용하여이 작업을 수행 할 수 있습니다 같은 :

sed '1,/<pre>/d;/<\/pre>/,$d' 

<pre>를 포함하는 하나까지 처음부터 모든 라인을 삭제 </pre>을 포함한 행부터 마지막 ​​행까지의 모든 행.

(FWIW, 나는 오히려 흥미로운 콘텐츠를 선택하는 XPath 표현식을 사용 xmlstarlet as suggested by Ignacio Vazquez-Abrams를 사용하여 예를 들어이 같이 갈 수있다 :.. xmlstarlet sel -t -v /html/body/pre)

+0

나는 해결책을 너무 좋아한다, 고마워! – ThinkCode