代码之家  ›  专栏  ›  技术社区  ›  user3342303

使用AWK和SED读取传感器,并将值输出到html文件

  •  0
  • user3342303  · 技术社区  · 11 年前

    我有一个TP-Link WR703N闪存与openWRT,连接到单线DS18B20温度传感器。我的目标是让路由器在网页上显示当前的温度。我正在使用digitalemp读取传感器

    当我发出以下命令时:

    root@OpenWrt:~#digitemp_DS9097-a

    digitalemp的回复是:

    DigiTemp v3.5.0版权所有1996-2007,作者:Brian C.Lane
    GNU公共许可证v2.0- http://www.digitemp.com
    2月23日02:46:31传感器0 C:25.44 F:77.79

    我找到了 this example ,其中使用带有AWK和SED的CRON脚本来读取c值,并更新HTML文件。

    当我尝试将脚本粘贴到/etc/crontabs/root时,一些qutation标记被替换为。。。在VI编辑器中。我尝试使用Nano编辑器,但它只是用^?^?^替换了qutation标记。我对AWK的理解不如我所愿,所以我很难弄清楚剧本的作者是否使用了错误的问号,或者是否有其他原因我无法输入正确的字符。

    如有任何意见,将不胜感激。

    1 回复  |  直到 11 年前
        1
  •  1
  •   bazzargh    11 年前

    这是博客文章的格式,它有非ASCII引号。只需编辑它们即可修复。

    */1 * * * * TEMP=$(digitemp_DS9097 -a | grep -i sensor | awk '{print $7}'); sed -i -r "14s,>[^<]*</,>${TEMP}</," /www/index.html
    

    我不确定这行的其余部分是否正确,但我的sed没有-r标志,脚本试图更改第14行(因此是14s…),这对你是否从博客中复制了html非常挑剔。我用这个代替:

    */1 * * * * TEMP=$(digitemp_DS9097 -a |grep -i sensor | awk '{print $7}');sed -i.bak "s,\\(66cc00.*\">\\)[^<]*</,\\1$TEMP</,"  /www/index.html
    

    这与行上的颜色号相匹配。额外的 \\(...\\) 正在捕获,以便我可以在替换时再次使用它 \\1 .

    我刚读了手册 digitemp_DS9097 ( http://www.linuxcertif.com/man/1/digitemp_DS9097/ )-你最好以 digitemp_DS9097 -q -t 0 -O"%.2C" ,它直接将输出作为单个摄氏数,而不需要grep/awk。如:

    */1 * * * * TEMP=$(digitemp_DS9097 -q -t 0 -O"%.2C");sed -i.bak "s,\\(66cc00.*\">\\)[^<]*</,\\1$TEMP</,"  /www/index.html