解码sed表达式

解码sed表达式,sed,Sed,我想了解本规范的sed部分: /usr/local/bin/pcsensor -l60 -n | sed -e "s/^.*\$/PUTVAL downloads\/exec-environmental\/temperature-cpu interval=30 N:\0/" (输入)pcsensor产生: 2016/09/19 22:41:31 Temperature 90.50F 32.50C 代码生成(输出): 我希望理解sed表达式能帮助我去掉最后一个数字(因此temp只有小数点后1位

我想了解本规范的sed部分:

/usr/local/bin/pcsensor -l60 -n | sed -e "s/^.*\$/PUTVAL downloads\/exec-environmental\/temperature-cpu interval=30 N:\0/"
(输入)pcsensor产生:

2016/09/19 22:41:31 Temperature 90.50F 32.50C
代码生成(输出):

我希望理解sed表达式能帮助我去掉最后一个数字(因此temp只有小数点后1位)

更新:我的booboo(晚了):

命令第一部分中的-n输出以下内容:

32.50
在echo/printf中哪一个工作良好

printf "32.50 %s\n"| sed -e "s/^.*\$/PUTVAL downloads\/exec-environmental\/temperature-cpu interval=30 N:\0/"
关于

这是一个sed命令,即表示“替换”的
s/../../
。简单地说,它对要处理的每一行都执行一次“搜索和替换”

“搜索”部分是
^.*$
,“替换”部分是
PUTVAL downloads\/exec environment\/temperature cpu interval=30 N:\0/

^.*\$
是一个简单的词,在这里代表“一切”或“整行”。因此,
s
命令将用

PUTVAL downloads\/exec-environmental\/temperature-cpu interval=30 N:\0/
正如Benjamin W.所说,
\0
的使用是“奇怪的”。它显然是指所谓的引用,因此我们搜索的部分附加在文本“PUTVAL(…)val=30 N:”之后

不过,我对这种表达方式有几个问题

  • \0
    不在我的Debian GNU Sed 4.2.2手册页中
  • 这里不需要用
    引用
    sed
    命令,这会使事情变得不必要的复杂和容易出错。应改用单引号
  • Shell中的任何位置,尤其是Sed中的
    \0
    都可以很好地代表空字符,由于
    引用,它在这里会引起更多的危险信号
  • 使用
    sed
    只是在文本前面加上前缀是“sed的无用用法”
既然您询问了有关sed的问题,下面是我将如何编写它:

sed -e 's/^.*$/PUTVAL downloads\/exec-environmental\/temperature-cpu interval=30 N:&/'
&
代表“搜索部件找到的内容”。在你的情况下,整条线

为了切掉最后一个小数点,有很多方法可以做到这一点。一个相当简单的方法假设输入总是有2个小数。然后,我们可以预先编写一个命令,将最后一个字符(
$
)替换为“nothing”(
/
):

然而,正如我所说的,
sed
在这里是过分的。例如,您可以使用
printf

text='PUTVAL downloads/exec-environmental/temperature-cpu interval=30 N:'
printf "%s%3.1f\n" "$text" $(/usr/local/bin/pcsensor -l60 -n)
关于

这是一个sed命令,即表示“替换”的
s/../../
。简单地说,它对要处理的每一行都执行一次“搜索和替换”

“搜索”部分是
^.*$
,“替换”部分是
PUTVAL downloads\/exec environment\/temperature cpu interval=30 N:\0/

^.*\$
是一个简单的词,在这里代表“一切”或“整行”。因此,
s
命令将用

PUTVAL downloads\/exec-environmental\/temperature-cpu interval=30 N:\0/
正如Benjamin W.所说,
\0
的使用是“奇怪的”。它显然是指所谓的引用,因此我们搜索的部分附加在文本“PUTVAL(…)val=30 N:”之后

不过,我对这种表达方式有几个问题

  • \0
    不在我的Debian GNU Sed 4.2.2手册页中
  • 这里不需要用
    引用
    sed
    命令,这会使事情变得不必要的复杂和容易出错。应改用单引号
  • Shell中的任何位置,尤其是Sed中的
    \0
    都可以很好地代表空字符,由于
    引用,它在这里会引起更多的危险信号
  • 使用
    sed
    只是在文本前面加上前缀是“sed的无用用法”
既然您询问了有关sed的问题,下面是我将如何编写它:

sed -e 's/^.*$/PUTVAL downloads\/exec-environmental\/temperature-cpu interval=30 N:&/'
&
代表“搜索部件找到的内容”。在你的情况下,整条线

为了切掉最后一个小数点,有很多方法可以做到这一点。一个相当简单的方法假设输入总是有2个小数。然后,我们可以预先编写一个命令,将最后一个字符(
$
)替换为“nothing”(
/
):

然而,正如我所说的,
sed
在这里是过分的。例如,您可以使用
printf

text='PUTVAL downloads/exec-environmental/temperature-cpu interval=30 N:'
printf "%s%3.1f\n" "$text" $(/usr/local/bin/pcsensor -l60 -n)

我原以为
\0
一定是打字错误,但显然它与
&
一样(重复整个匹配)。不过,我在任何地方都看不到这个文档。顺便问一下,您使用的是哪个版本的sed?我用这个sed命令为您的输入获得了不同的输出。无论如何,我都不会用sed说话。对我来说,这是一件令人大吃一惊的事。sed(GNU sed)4.2.2输入和输出不匹配。它们是示例。数字是温度。我将示例更新为“匹配”。这是从实时服务器进行复制和粘贴。这个代码有效。但是我不明白。我想
\0
一定是个打字错误,但显然它与
&
一样(重复整个匹配)。不过,我在任何地方都看不到这个文档。顺便问一下,您使用的是哪个版本的sed?我用这个sed命令为您的输入获得了不同的输出。无论如何,我都不会用sed说话。对我来说,这是一件令人大吃一惊的事。sed(GNU sed)4.2.2输入和输出不匹配。它们是示例。数字是温度。我将示例更新为“匹配”。这是从实时服务器进行复制和粘贴。这个代码有效。不过我不明白。谢谢你的回复。那就这样吧。删除多余的数字对于其他情况没有任何改变。更多的是我尝试我能想到的任何事情。:)谢谢你的回复。那就这样吧。删除多余的数字对于其他情况没有任何改变。更多的是我尝试我能想到的任何事情。:)