$ 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:
-
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 dariSayStuff
ke dalam larikfoo
dan kamu laluecho
itu elemen ketiga dengan${foo[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
-
pesta
$ foo=$(SayStuff); echo ${foo##* } cucumbers
Ini menggunakan kemampuan manipulasi string bash, lihat di sini untuk detail lebih lanjut.
-
Lebih bash
$ SayStuff | while read a b c; do echo $c; done cucumbers
-
Perl, di mana tentu saja, ada banyak cara untuk melakukannya:
$ SayStuff | perl -lane 'print $F[$#F]' cucumber
-a
membuatperl
berperilaku sepertiawk
, 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 setiapprint
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
. -
tipu daya. Yang ini menggunakan
sed
untuk mengubah spasi menjadi baris baru lalutail
untuk mencetak hanya baris terakhir.$ SayStuff | sed 's/ /\n/g' | tail -n 1 cucumbers
-
grep dan ekspresi reguler, menggunakan
-o
yang hanya mencetak string yang cocok.$ SayStuff | grep -Po '\w+$' cucumbers
-
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.