最初のタスクは、その行からレートを抽出することです。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/'
sedよりも柔軟性が高いのはawkです。Awkは、小さな命令型言語で各行の命令を実行します。ここでレートを抽出する方法は多数あります。2番目のフィールドを選択し(フィールドはデフォルトで空白文字で区切られています)、数字ではないすべての文字を削除します。
command1 -p=aaa -v=bbb -i=4 | awk '{gsub(/[^0-9]+/, "", $2); print $2}'
次のステップは、レートを抽出したので、引数としてに渡すことcommand2
です。そのためのツールは、コマンドsusbtitutionです。コマンドを中に$(…)
挿入すると(ドル括弧)、その出力はコマンドラインに置き換えられます。コマンドの出力は、各空白ブロックで個別の単語に分割され、各単語はワイルドカードパターンとして扱われます。これを実行したくない場合は、コマンド置換を二重引用符で囲みます"$(…)"
。二重引用符を使用すると、コマンドの出力が単一のパラメーターとして直接使用されます(唯一の変換は、出力の最後の改行が削除されることです)。
command2 -t "$(command1 -p=aaa -v=bbb -i=4 |
sed 's/^.*rate(\([0-9]*\)%).*$/\1/')"