GNU/Linux >> Belajar Linux >  >> Linux

Lewati Output Perintah Sebelumnya Ke Berikutnya Sebagai Argumen?

Saya memiliki perintah yang mengeluarkan data ke stdout (command1 -p=aaa -v=bbb -i=4 ).
Baris keluaran dapat memiliki nilai berikut:

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

Saya ingin mengambil output itu untuk menyimpan 'rate' itu (saya kira pipa akan berguna di sini).
Dan akhirnya, saya ingin rate itu menjadi nilai parameter pada perintah kedua (katakanlah command2 -t=${rate} )

Tampaknya rumit di pihak saya; Saya ingin tahu lebih baik bagaimana menggunakan pipa, grep, sed dan sebagainya.

Saya sudah mencoba banyak kombinasi seperti itu tetapi saya bingung dengan ini:

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

Jawaban yang Diterima:

Anda membingungkan dua jenis input yang sangat berbeda.

  1. Masukan standar (stdin )
  2. Argumen baris perintah

Ini berbeda, dan berguna untuk tujuan yang berbeda. Beberapa perintah dapat menerima input dengan dua cara, tetapi biasanya menggunakannya secara berbeda. Ambil contoh wc perintah:

  1. Melewati input dengan stdin :

    ls | wc -l
    

    Ini akan menghitung baris dalam output ls

  2. Melewati input dengan argumen baris perintah:

    wc -l $(ls)
    

    Ini akan menghitung baris dalam daftar file dicetak oleh ls

Hal yang sama sekali berbeda.

Untuk menjawab pertanyaan Anda, sepertinya Anda ingin menangkap laju dari output perintah pertama, lalu menggunakan laju sebagai argumen baris perintah untuk perintah kedua. Inilah salah satu cara untuk melakukannya:

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

Penjelasan dari sed :

  • s/pattern/replacement/ perintahnya adalah mengganti beberapa pola
  • Artinya polanya:baris harus diawali dengan “rate” (^rate ) diikuti oleh dua karakter (.. ), diikuti dengan 0 digit atau lebih, diikuti dengan % , diikuti oleh teks lainnya (.* )
  • 1 dalam penggantian berarti konten ekspresi pertama yang ditangkap dalam (...) , jadi dalam hal ini digit sebelum % tanda
  • -n bendera sed perintah berarti tidak mencetak baris secara default. p di akhir s/// perintah berarti mencetak baris jika ada penggantinya. Singkatnya, perintah akan mencetak sesuatu hanya jika ada kecocokan.

Linux
  1. Bagaimana Cara Melewati Argumen Baris Perintah Menjadi Skrip Shell?

  2. Bagaimana saya bisa mengingat argumen dari perintah bash sebelumnya?

  3. Cara menyampaikan argumen di Harapkan melalui baris perintah dalam skrip Shell

  1. Dengan Bash Setelah "menggulir" Ke Perintah Sebelumnya ... Bagaimana Cara Pindah Ke Berikutnya Dalam Sejarah Ini?

  2. $_ Vs !$. Argumen Terakhir Dari Perintah Sebelumnya Dan Pengalihan Output?

  3. Bagaimana cara menambahkan output ke file?

  1. Cara meneruskan output perintah sebagai beberapa argumen ke perintah lain

  2. Apa arti pipa linux | melakukan?

  3. Bagaimana cara membaca kolom IDLE di output perintah 'w' Linux?