使用SED替换搜索条件后的变量字符串

时间:2014-10-07 04:40:17

标签: regex linux bash sed

在错误检查循环中的shell脚本中,我有一个包含必须每小时更新一次的变量的命令。当前存在的命令是(行以\ t开头):

        /home/user/therm/therm -d /dev/ttyUSB0 -t host -O 44.0

在这种情况下,我正在尝试替换“-O”之后的数字。这是华氏温度,因此它可能是负数或正数,一个,两个或三个数字后跟一个小数位。因此,我必须能够将一个可能是“-15.0”,“7.2”,“104.5”或任何其他组合的变量替换为一个也可能是上述任何一个的新变量。

我可以强制“-O”设置成为该行的最后一件事,这有助于一些。但除了文件名,“-d / dev / ttyUSB0”和“-O”总是存在之外,我不能指望该行上的任何其他内容。在这个特定的shell脚本中没有其他“-O”实例,但我可能想验证该行是否有文件名或“-d / dev / ttyUSB0”,以避免替换其他一些标志脚本中的一行。

从一小时一次通过wget获取的XML文件中解析(通过xmllint和sed)新变量。我需要编辑的这个shell脚本每隔5分钟由cron运行一次,每小时只接收一次新字符串。新字符串可以通过变量传递给sed,也可以传递给只有数字和\ n的文件。

任何想法或精彩的想法将不胜感激。感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用此sed命令:

# string to be replaced
r=123.4
sed "s/\(-O *\)[^[:blank:]]*/\1$r/" file
/home/user/therm/therm -d /dev/ttyUSB0 -t host -O 123.4

模式-O *[^[:blank:]]*会找到文字-O后跟0或更多空格,然后是非空格字符串。

答案 1 :(得分:0)

这似乎有效

awk '{$NF=($NF-32)/1.8;print}'