sed를 사용하여 html 태그에서 값을 추출하고 싶습니다.
문서:
<td class=xl7128074></td>
<td class=xl7128074></td>
<td class=xl7128074></td>
</tr>
<tr height=21 style='height:15.75pt'>
<td height=21 class=xl8428074 style='height:15.75pt;border-top:none'>ANT</td>
<td class=xl10028074 style='border-top:none;border-left:none'>$interoprfbcheck_prodconnectorstatus_ANT</td>
<td class=xl8228074>ANT</td>
<!-- This is set by Python -->
<td class=xl155577 style='border-left:none;font-size:11.0pt;color:#006100;
font-weight:400;text-decoration:none;text-underline-style:none;text-line-through:
none;font-family:Arial;border-top:none;border-right:1.0pt solid windowtext;
border-bottom:1.0pt solid windowtext;border-left:1.0pt solid windowtext;
background:#E6EFCE;mso-pattern:black none'>
GREEN</td>
<td class=xl7128074></td>
<td class=xl7128074></td>
<td class=xl7128074></td>
예상되는 결과를 원합니다.
ANT
$interoprfbcheck_prodconnectorstatus_ANT
ANT
GREEN
나는 sed -n 's/<td.*>\(.*\)<\/td>/\1/p' filename.html
다음과 같은 결과를 사용하고 얻고 있습니다 :
ANT
$interoprfbcheck_prodconnectorstatus_ANT
ANT
GEEEN은 오지 않습니다. 같은 행에 있지 않기 때문에 다음 행의 결과를 얻기 위해 추가할 수 있는 것이 있습니까?
답변1
html2
이것을 sed의 "전처리기" 로 사용할 수 있습니다 .
$ html2 <file 2>/dev/null | sed '/td=/!d;s/^.*td=//'
ANT
$interoprfbcheck_prodconnectorstatus_ANT
ANT
GREEN
답변2
GREEN
sed
생성기가 별도의 줄에 배치하므로 스크립트가 일치하는 항목을 찾을 수 없기 때문에 표시되지 않습니다 . 들어오는 스트림은 특별한 준비 없이 sed
한 줄씩 일치하는 공간으로 당겨집니다 .
N
따라서 명령을 사용하여 일치 공간이 닫힐 때까지 새 줄을 일치 공간으로 끌어온 </tr>
다음 예약된 공간에 패턴 공간의 복사본을 저장하고 선행 <tr ...>
태그를 제거하고 </tr>
일치 공간의 시작부터 끝까지 모든 것을 삭제해야 합니다. 인쇄하세요.
그런 다음 일치하는 공간을 공간을 보존하는 것으로 바꾸고 인쇄된 부분을 삭제한 다음 선행 <tr ...>
태그를 다시 찾기 시작해야 합니다.
info sed
자세한 내용은 다음을 참조하세요.
답변3
게시한 HTML 예제는 여러 가지 이유로 유효한 XML이 아닙니다. 그러나 문제가 해결되면 다음 명령을 사용할 수 있습니다.
xmlstarlet sel -t -v '//td[text()]' input.html
비어 있지 않은 마지막 텍스트가 대신 td
이기 때문에 결과는 정확히 예상한 것과 다릅니다 .GREEN
\nGREEN