GNU/Linux >> Linux の 問題 >  >> Linux

前のコマンドの出力を引数として次のコマンドに渡しますか?

stdoutにデータを出力するコマンドがあります(command1 -p=aaa -v=bbb -i=4 )。
出力行には、次の値を指定できます。

rate (10%) - name: value - 10Kbps

その「レート」を格納するために、その出力をgrepしたいと思います(ここではパイプが役立つと思います)。
最後に、そのレートを2番目のコマンドのパラメーターの値にします(たとえば、 command2 -t=${rate}

私の側ではトリッキーに見えます。パイプ、grep、sedなどの使い方をもっと知りたいです。

そのような組み合わせをたくさん試しましたが、混乱しています:

$ command1 -p=aaa -v=bbb -i=4 | grep "rate" 2>&1 command2 -t="rate was "${rate}

承認された回答:

2つの非常に異なるタイプの入力を混同しています。

  1. 標準入力(stdin
  2. コマンドライン引数

これらは異なり、さまざまな目的に役立ちます。一部のコマンドは両方の方法で入力を受け取ることができますが、通常はそれらの使用方法が異なります。たとえば、wc コマンド:

  1. stdinによる入力の受け渡し :

    ls | wc -l
    

    これにより、lsの出力の行がカウントされます

  2. コマンドライン引数による入力の受け渡し:

    wc -l $(ls)
    

    これにより、ファイルリストの行がカウントされます lsによって印刷されます

まったく違うもの。

質問に答えるには、最初のコマンドの出力からレートを取得し、そのレートを2番目のコマンドのコマンドライン引数として使用する必要があるようです。そのための1つの方法は次のとおりです。

rate=$(command1 | sed -ne 's/^rate..([0-9]*)%.*/1/p')
command2 -t "rate was $rate"

sedの説明 :

  • s/pattern/replacement/ コマンドはいくつかのパターンを置き換えることです
  • パターンの意味:行は「rate」(^rateで始まる必要があります )の後に任意の2文字(.. )、0桁以上、%が続きます 、その後に残りのテキスト(.*
  • 1 置換とは、(...)内でキャプチャされた最初の式のコンテンツを意味します 、したがって、この場合、%の前の数字 サイン
  • -n sedのフラグ commandは、デフォルトで行を印刷しないことを意味します。 p s///の最後に コマンドは、置換があった場合にその行を印刷することを意味します。つまり、コマンドは一致した場合にのみ何かを出力します。

Linux
  1. あるコマンドの出力を引数として別のコマンドに渡す方法は?

  2. 前の bash コマンドの引数を思い出すにはどうすればよいですか?

  3. Linux のパイプ記号 |行う?

  1. コマンドライン引数をシェルスクリプトに渡す方法は?

  2. 前のコマンドまで「スクロール」した後のBashを使用して…この履歴で次のコマンドに移動するにはどうすればよいですか?

  3. 成功した場合にのみシェル コマンドの出力を非表示にしますか?

  1. コマンドの出力をシェル変数に割り当てる方法は?

  2. $ _対!$。前のコマンドと出力リダイレクトの最後の引数?

  3. コメントされたコマンドの最後の引数にアクセスする方法は?