我只想从命令输出中提取一个特定的值。
命令返回的字符串是这样的:
Result: " 5 Secs (11.2345%) 60 Secs (22.3456%) 300 Secs (33.4567%)"
Run Code Online (Sandbox Code Playgroud)
我只想过滤 () 之间的“60 秒”值
22.3456%
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
如果这是命令返回的确切字符串,sed
则将起作用。
command_output | sed 's/.*60 Secs..\(.*\)..300.*/\1/'
Run Code Online (Sandbox Code Playgroud)
这会打印60 Secs (
和之间的所有内容) 300
。
结果:
22.3456%
Run Code Online (Sandbox Code Playgroud)
你可以在sed
,是的。只需搜索60 Secs (
然后尽可能多的非-%
字符,直到第一个%
:
$ echo "5 Secs (11.2345%) 60 Secs (22.3456%) 300 Secs (33.4567%)" |
sed 's/.* 60 Secs (\([^%]*%\).*/\1/'
22.3456%
Run Code Online (Sandbox Code Playgroud)
或者,在 perl 中:
$ echo "5 Secs (11.2345%) 60 Secs (22.3456%) 300 Secs (33.4567%)" |
perl -lne '/.* 60 Secs \(([^%]*%)/; print "$1"'
22.3456%
Run Code Online (Sandbox Code Playgroud)
或者,如果格式是标准的并且您知道您总是想要第 6 个字段,您可以执行以下操作:
$ echo "5 Secs (11.2345%) 60 Secs (22.3456%) 300 Secs (33.4567%)" |
awk '{gsub(/[()]/,""); print $6}'
22.3456%
Run Code Online (Sandbox Code Playgroud)
或者:
$ echo "5 Secs (11.2345%) 60 Secs (22.3456%) 300 Secs (33.4567%)" |
cut -d' ' -f6 | tr -d '()'
22.3456%
Run Code Online (Sandbox Code Playgroud)