第一个任务是从那条线中提取速率。对于GNU grep(非嵌入式Linux或Cygwin),可以使用该-o
选项。您想要的部分是仅包含数字的部分,后跟一个%
符号。如果您不想提取%
自身,则需要一个额外的技巧:零宽度的超前声明,该声明不匹配任何东西,但前提是不匹配%
。
command1 -p=aaa -v=bbb -i=4 | grep -o -P '[0-9]+(?=%)'
另一种可能性是使用sed。要提取sed中的行的一部分,请使用s
命令,并使用与整个行匹配的正则表达式(以开头^
和结尾$
),并将该部分保留在组(\(…\)
)中。将整个行替换为要保留的组的内容。通常,传递-n
选项以关闭默认打印,并将p
修饰符放到要提取内容的行上打印(这里只有一行,所以没关系)。有关更多sed技巧,请参见仅返回匹配模式之后的行的一部分,并提取与“ sed”匹配的正则表达式,而不打印周围的字符。
command1 -p=aaa -v=bbb -i=4 | sed 's/^.*rate(\([0-9]*\)%).*$/\1/'
awk比sed更灵活。Awk以一种小的命令式语言为每一行执行指令。这里有很多方法可以提取费率;我选择第二个字段(默认情况下,字段由空格分隔),并删除其中的所有非数字字符。
command1 -p=aaa -v=bbb -i=4 | awk '{gsub(/[^0-9]+/, "", $2); print $2}'
现在,您已经提取了汇率,下一步就是将其作为参数传递给command2
。用于此目的的工具是命令替代。如果在内部放置命令$(…)
(美元括号),则其输出将替换为命令行。命令的输出在每个空格块处分为多个单独的单词,每个单词都被视为通配符模式;除非您希望发生这种情况,否则请在命令替换处加上双引号:"$(…)"
。使用双引号将命令的输出直接用作单个参数(唯一的转换是删除了输出末尾的换行符)。
command2 -t "$(command1 -p=aaa -v=bbb -i=4 |
sed 's/^.*rate(\([0-9]*\)%).*$/\1/')"