GNU/Linux >> Belajar Linux >  >> Linux

Baris perintah:Ekstrak substring dari output

$ echo "Watermelons and cucumbers" | cut -d ' ' -f 3
cucumbers

-d ' ' memberi tahu cut untuk membagi ruang. -f 3 memilih kolom ketiga.

Anda juga dapat menggunakan awk , yang sudah melakukan pemisahan berdasarkan ruang dan membuat kolom tersedia sebagai $1 , $2 , …

$ echo "Watermelons and cucumbers" | awk '{ print $3 }'
cucumbers

Saya mungkin akan menggunakan salah satu opsi yang sudah diberikan oleh @slhck tetapi berikut adalah beberapa cara untuk melakukannya:

  1. Menggunakan array, seperti yang Anda lakukan dalam bahasa lain:

    $ foo=( $(SayStuff) ) 
    $ echo ${foo[2]}
    cucumbers
    

    var=() mendeklarasikan array, $(command) menyimpan output dari perintah. Jadi, foo=( $(SayStuff) ) menyimpan output dari SayStuff ke dalam larik foo dan kamu lalu echo itu elemen ketiga dengan ${foo[2]} .

  2. sed

    $ SayStuff | sed 's/.* \(.*\)/\1/'
    cucumbers
    

    sed perintah akan menggantikan (s/// ) semuanya dengan kata terakhir. Regex cocok dengan apa pun hingga spasi (.* ) yang akan mencocokkan semuanya hingga spasi terakhir dan kemudian menangkap kata terakhir (\(.*\) . Karena kata tersebut telah ditangkap, kita dapat menyebutnya sebagai \1 .

    Versi yang lebih sederhana:

    $ SayStuff | sed 's/.* //'
    cucumbers
    
  3. pesta

    $ foo=$(SayStuff); echo ${foo##* } 
    cucumbers
    

    Ini menggunakan kemampuan manipulasi string bash, lihat di sini untuk detail lebih lanjut.

  4. Lebih bash

    $ SayStuff | while read a b c; do echo $c; done
    cucumbers
    
  5. Perl, di mana tentu saja, ada banyak cara untuk melakukannya:

    $ SayStuff | perl -lane 'print $F[$#F]'
    cucumber
    

    -a membuat perl berperilaku seperti awk , memisahkan baris pada spasi putih dan menyimpan ke dalam larik @F . Kami kemudian mencetak elemen terakhir dari @F ($#F adalah jumlah elemen dalam @F ). -l memberi tahu perl untuk menambahkan baris baru ke setiap print pernyataan, -n bahwa itu harus memproses STDIN baris demi baris dan -e bahwa itu harus menjalankan skrip yang diberikan pada baris perintah.

    $ SayStuff | perl -pe 's/.* //'
    cucumber
    

    Opsinya dijelaskan di atas, kami hanya menghapus semuanya hingga spasi terakhir dan mencetak (-p ).

    $ perl -le 'print $ARGV[$#ARGV]' $(SayStuff)
    cucumbers
    

    Di sini kita memberikan Watermelons and cucumbers sebagai argumen, perl mana yang akan disimpan di @ARG array dan karenanya, kami mencetak elemen terakhir dari @ARG .

  6. tipu daya. Yang ini menggunakan sed untuk mengubah spasi menjadi baris baru lalu tail untuk mencetak hanya baris terakhir.

    $ SayStuff | sed 's/ /\n/g' | tail -n 1
    cucumbers
    
  7. grep dan ekspresi reguler, menggunakan -o yang hanya mencetak string yang cocok.

    $ SayStuff | grep -Po '\w+$' 
    cucumbers
    
  8. curang

    $ SayStuff | grep -o cucumbers
    cucumbers
    

Berikut beberapa penjelasan lainnya:

Usage: cut OPTION... [FILE]...

Print selected parts of lines from each FILE to standard output.

   -d, --delimiter=DELIM
          use DELIM instead of TAB for field delimiter

   -f, --fields=LIST
          select only these fields;  also print any line that contains  no
          delimiter character, unless the -s option is specified

Jadi jika Anda membutuhkan bidang ke-3 dan dibatasi oleh spasi ' ' maka itu adalah

$ echo "Watermelons and cucumbers" | cut -d ' ' -f 3  
cucumbers

Jika Anda menginginkan yang TERAKHIR Anda mungkin harus menggunakan awk .
Dalam hal ini menjadi:

$ echo "Semangka dan mentimun" | awk '{ cetak $NF }'
mentimun

Di awk NF adalah jumlah field dalam baris jadi $NF berarti kolom terakhir di baris.


Linux
  1. Temukan versi WordPress dari baris perintah

  2. Menjalankan perintah linux dari python

  3. unduh gambar dari google dengan baris perintah

  1. matlab mengeksekusi skrip dari baris perintah linux

  2. Pisahkan video MPEG dari baris perintah?

  3. Clonezilla dari Baris Perintah

  1. Bagaimana Mengenalinya Versi Os X Saya Dari Baris Perintah?

  2. Linux – Bagaimana Cara Mengalihkan Perangkat Output Pulseaudio Dari Baris Perintah dengan Kuat?

  3. Bagaimana Mengubah Output Audio Ke HDMI Dari Command Line?