通过 grep/awk 从简单的 html 文件中提取值

通过 grep/awk 从简单的 html 文件中提取值

我在下面附加的 HTML 代码中遇到了另一个 grep/awk/sed 问题。

给出的是一个简单的 HTML 文件,里面有表格。 HTML 由智能电表(家用电表)生成。在 html 表中,显示了两个对我来说很重要的值:Pplus 和 Pminus。这些是来自电网的实际功率和来自我的太阳能发电厂的实际功率。

我想以“稳定/安全”的方式分别获取这两个值,以减少出错的可能性。我的理解是html结构永远不会改变。作为查找值的起点,18.000意味着来自能源网的 18W 当前功率,0.00000意味着我的太阳能发电厂当前产生的 0W(夜晚)。

对于我自己来说,几乎不可能找到一些可以帮助抓住正确位置的结构,我真的很感谢您在这里的专家观点以及是否有可能使这项工作成功。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML>
<HEAD>
<TITLE>NK-FW graphic by Lingg & Janke</TITLE>
<LINK REL="apple-touch-icon" HREF="/NKFW_icon57.png">
<META NAME="description" CONTENT="NK-FW graphic by Lingg & Janke">
<META HTTP-EQUIV="cache-control" CONTENT="no-cache">

<BASE TARGET="_top">

<STYLE TYPE="text/css">

BODY  {margin-left:0; margin-right:0; margin-top:0;}

A     {font-family:Arial; font-size:18px; font-weight:bold; color:#FFFFFF; }
TABLE {font-family:Arial; font-size:18px; font-weight:bold; color:#FFFFFF; }

INPUT {font-family:Arial; font-size:18px; font-weight:bold; color:#000000; }
SELECT{font-family:Arial; font-size:18px; font-weight:bold; color:#000000; }

.inputwidth  {width:190px;}
.keywidth    {width:190px;}

#idLJheadDiv {
               position:absolute;
               width:960px;
               height:50px;
               top:10px;
               left:0px;
               padding:0px;
               margin:0px;
               border:0px;
               background-color:#0074B2;
             }
#idLJheadTd1 {
               font-size:30px;
               font-family:Arial;
               font-weight:bold;
               font-style:normal;
               color:#FFFFFF;

               height:50px;
               text-align:left;
               vertical-align:middle;
             }
#idLJheadTd2 {
               font-size:20px;
               font-family:Arial;
               font-weight:bold;
               font-style:normal;
               color:#FFFFFF;

               height:50px;
               text-align:center;
               vertical-align:middle;
             }
#idLJheadTd3 {
               font-size:30px;
               font-family:Arial;
               font-weight:bold;
               font-style:italic;
               color:#FFFFFF;

               height:50px;
               text-align:right;
               vertical-align:middle;
             }


#idLJfootDiv {
               position:absolute;
               width:960px;
               height:50px;
               top:600px;
               left:0px;
               padding:0px;
               margin:0px;
               border:0px;
               background-color:#0074B2;
             }
#idLJfootTd  {
               font-size:30px;
               font-family:Arial;
               font-weight:bold;
               font-style:italic;
               color:#FFFFFF;

               height:50px;
               text-align:left;
               vertical-align:middle;
             }


#idButtonDiv {
               position:absolute;
               width:228px;
               height:50px;
               padding:0px;
               margin:0px;
               border:0px;
               background-color:#2f2f2f;
             }

#idButtonTd  {
               height:50px;
               vertical-align:middle;
             }

</STYLE>
</HEAD>

<!-- ************************** -->

<BODY SCROLL="auto"
      onResize="DoReposition();"
      onLoad="DoReposition();"
      BGCOLOR="#000000"
      TOPMARGIN=0
      LEFTMARGIN=0
      LINK=#ffffff
      VLINK=#ffffff
      ALINK=#ffffff >

<!-- ************************** -->

<SCRIPT LANGUAGE="JavaScript">
<!--
function HOffset()
{
   var window_width = window.innerWidth ? window.innerWidth : (document.body.clientWidth ? document.body.clientWidth : 0);
   return Math.max( 0, Math.floor( (window_width - 960) / 2 ) - 0 ).toString();
}

function VOffset()
{
   var window_height = window.innerHeight ? window.innerHeight : (document.body.clientHeight ? document.body.clientHeight : 0);
   return 0;
}

document.write( "<DIV ID='IDAlignPage' style='position:absolute; top:" + VOffset() + "px; left:" + HOffset() + "px;'>&nbsp;" );

function DoReposition()
 {var o='IDAlignPage';
   if(is_dom2&&document.getElementById(o))
    {var e=document.getElementById(o);e.style.left=HOffset()+'px';e.style.top=VOffset()+'px';}
   else if(is_ie&&is_major>=4&&eval('document.all.'+o))
    {var e=eval('document.all.'+o);e.style.left=HOffset()+'px';e.style.top=VOffset()+'px';}
   else if(is_nav&&is_major>=4&&eval('document.'+o))
    {var e=eval('document.'+o);e.left=HOffset();e.top=VOffset();}
 }

window.onresize=DoReposition;
window.onload=DoReposition;

//-->
</SCRIPT>








<!-- ************************** -->
<!-- *** upper + lower bar  *** -->

<DIV ID="idLJheadDiv">
  <TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0" WIDTH=100%><TR>
    <TD ID="idLJheadTd1">&nbsp;&nbsp;Smart Metering</TD>
    <TD ID="idLJheadTd2">
      SA
      &nbsp;&nbsp;
      21.06.2014
      &nbsp;&nbsp;
      21:57:02
      &nbsp;&nbsp;
      KW25
    </TD>
    <TD ID="idLJheadTd3">Lingg &amp; Janke&nbsp;&nbsp;</TD>
  </TR></TABLE>
</DIV>

<DIV ID="idLJfootDiv">
  <TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0" WIDTH=100%><TR>
    <TD ID="idLJfootTd">&nbsp;&nbsp;Energy Analyzer</TD>
  </TR></TABLE>
</DIV>


<!-- ************************** -->
<!-- *** 1. row *************** -->

<!-- -->
<DIV ID="idButtonDiv" STYLE="top:78px; left:0px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">
P&#043; in Watt

</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" STYLE="top:78px; left:244px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">

</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" style="top:78px; left:488px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">

</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" style="top:78px; left:732px;" ALIGN="CENTER" >
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">

</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- ************************** -->
<!-- *** 2. row *************** -->

<!-- -->
<DIV ID="idButtonDiv" STYLE="top:143px; left:0px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">
18.000

</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" STYLE="top:143px; left:244px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">
<form action="g1.htm" method="GET">
<input type="submit" class="keywidth" name="A" value="MykWh">
</form>
</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" style="top:143px; left:488px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">
<form action="g2.htm" method="GET">
<input type="submit" class="keywidth" name="A" value="Supply">
</form>
</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" style="top:143px; left:732px;" ALIGN="CENTER" >
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">

</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- ************************** -->
<!-- *** 3. row *************** -->

<!-- -->
<DIV ID="idButtonDiv" STYLE="top:208px; left:0px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">
P- in Watt

</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" STYLE="top:208px; left:244px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">
<form action="g3.htm" method="GET">
<input type="submit" class="keywidth" name="A" value="G 3">
</form>
</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" style="top:208px; left:488px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">
<form action="g4.htm" method="GET">
<input type="submit" class="keywidth" name="A" value="G 4">
</form>
</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" style="top:208px; left:732px;" ALIGN="CENTER" >
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">

</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- ************************** -->
<!-- *** 4. row *************** -->

<!-- -->
<DIV ID="idButtonDiv" STYLE="top:273px; left:0px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">
0.00000

</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" STYLE="top:273px; left:244px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">
<form action="g5.htm" method="GET">
<input type="submit" class="keywidth" name="A" value="G 5">
</form>
</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" style="top:273px; left:488px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">
<form action="g6.htm" method="GET">
<input type="submit" class="keywidth" name="A" value="G 6">
</form>
</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" style="top:273px; left:732px;" ALIGN="CENTER" >
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">
P&#043;

</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- ************************** -->
<!-- *** 5. row *************** -->

<!-- -->
<DIV ID="idButtonDiv" STYLE="top:338px; left:0px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">

</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" STYLE="top:338px; left:244px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">
<form action="g7.htm" method="GET">
<input type="submit" class="keywidth" name="A" value="G 7">
</form>
</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" style="top:338px; left:488px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">
<form action="g8.htm" method="GET">
<input type="submit" class="keywidth" name="A" value="G 8">
</form>
</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" style="top:338px; left:732px;" ALIGN="CENTER" >
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">

</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- ************************** -->
<!-- *** 6. row *************** -->

<!-- -->
<DIV ID="idButtonDiv" STYLE="top:403px; left:0px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">

</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" STYLE="top:403px; left:244px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">

</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" style="top:403px; left:488px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">

</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" style="top:403px; left:732px;" ALIGN="CENTER" >
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">

</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- ************************** -->
<!-- *** 7. row *************** -->

<!-- -->
<DIV ID="idButtonDiv" STYLE="top:468px; left:0px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">
</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" STYLE="top:468px; left:244px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">

</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" style="top:468px; left:488px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">

</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" style="top:468px; left:732px;" ALIGN="CENTER" >
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">
</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- ************************** -->
<!-- *** 8. row *************** -->

<!-- -->
<DIV ID="idButtonDiv" STYLE="top:533px; left:0px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">

<form action="/index.htm" method="GET">
<input type="submit" class="keywidth" value="ZURCK" name="A">
</form>

</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" STYLE="top:533px; left:244px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">
</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" style="top:533px; left:488px;" ALIGN="CENTER">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">
</TD></TR></TABLE>
</DIV>
<!-- -->

<!-- -->
<DIV ID="idButtonDiv" style="top:533px; left:732px;" ALIGN="CENTER" >
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0"><TR><TD ID="idButtonTd">

<form action="/mainset/mainset.htm" method="GET">
<input type="submit" class="keywidth" value="EINRICHTEN" name="A">
</form>

</TD></TR></TABLE>
</DIV>
<!-- -->


<!-- ************************** -->

</BODY>
</HTML>

我已经尝试过上面提到的命令,但它们似乎不起作用。

下面的评论,关于 python,这将如何工作,有人可以帮我一把吗?我没有任何偏好,但当然更喜欢在各个方面(速度、效率……)看起来最先进的最佳解决方案

发布的 HTML 不会改变,只是值每 10 秒更新一次。

答案1

> awk '/ID="idButtonTd"/ {printline=1; next;}; 
   printline==1 && /^[0-9]+\.[0-9]+$/ { print $0; }; { printline=0; }' file
18.000
0.00000

答案2

如果 html 结构确实是不变的,那么以下应该可以工作:

totalValues=$(grep -A1 "idButtonTd" yourfile | grep -v "idButtonTd" | grep -v "\-\-" | grep "^[0-9][0-9]*")
Pplus=$(echo $totalValues | awk '{ print $1 }')
Pminus=$(echo $totalValues | awk '{ print $2 }')
echo "Pplus = $Pplus"
echo "Pminus = $Pminus"

相关内容