解码sed表达式
我想了解本规范的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位
/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:”之后
不过,我对这种表达方式有几个问题
不在我的Debian GNU Sed 4.2.2手册页中\0
- 这里不需要用
引用“
命令,这会使事情变得不必要的复杂和容易出错。应改用单引号sed
- Shell中的任何位置,尤其是Sed中的
都可以很好地代表空字符,由于\0
引用,它在这里会引起更多的危险信号李>“
- 使用
只是在文本前面加上前缀是“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:”之后
不过,我对这种表达方式有几个问题
不在我的Debian GNU Sed 4.2.2手册页中\0
- 这里不需要用
引用“
命令,这会使事情变得不必要的复杂和容易出错。应改用单引号sed
- Shell中的任何位置,尤其是Sed中的
都可以很好地代表空字符,由于\0
引用,它在这里会引起更多的危险信号李>“
- 使用
只是在文本前面加上前缀是“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输入和输出不匹配。它们是示例。数字是温度。我将示例更新为“匹配”。这是从实时服务器进行复制和粘贴。这个代码有效。不过我不明白。谢谢你的回复。那就这样吧。删除多余的数字对于其他情况没有任何改变。更多的是我尝试我能想到的任何事情。:)谢谢你的回复。那就这样吧。删除多余的数字对于其他情况没有任何改变。更多的是我尝试我能想到的任何事情。:)