sed -n 's/^potato:[[:space:]]*//p' file.txt
Seseorang dapat menganggap Grep sebagai Sed terbatas, atau Sed sebagai Grep umum. Dalam hal ini, Sed adalah salah satu alat bagus dan ringan yang melakukan apa yang Anda inginkan -- meskipun, tentu saja, ada beberapa cara lain yang masuk akal untuk melakukannya juga.
grep -Po 'potato:\s\K.*' file
-P
untuk menggunakan ekspresi reguler Perl
-o
untuk menampilkan hanya kecocokan
\s
untuk mencocokkan spasi setelah potato:
\K
untuk menghilangkan kecocokan
.*
untuk mencocokkan sisa string
Atau gunakan pernyataan regex:grep -oP '(?<=potato: ).*' file.txt
grep 'potato:' file.txt | sed 's/^.*: //'
grep
mencari setiap baris yang berisi string potato:
, lalu, untuk setiap baris ini, sed
menggantikan (s///
- gantikan) karakter apa saja (.*
) dari awal baris (^
) hingga kemunculan terakhir dari urutan :
(titik dua diikuti spasi) dengan string kosong (s/...//
- ganti bagian pertama dengan bagian kedua, yang kosong).
atau
grep 'potato:' file.txt | cut -d\ -f2
Untuk setiap baris yang berisi potato:
, cut
akan membagi baris menjadi beberapa bidang yang dibatasi oleh spasi (-d\
- d
=pembatas, \
=karakter spasi yang lolos, seperti -d" "
juga akan berfungsi) dan mencetak bidang kedua dari setiap baris tersebut (-f2
).
atau
grep 'potato:' file.txt | awk '{print $2}'
Untuk setiap baris yang berisi potato:
, awk
akan mencetak kolom kedua (print $2
) yang secara default dibatasi oleh spasi.
atau
grep 'potato:' file.txt | perl -e 'for(<>){s/^.*: //;print}'
Semua baris yang berisi potato:
dikirim ke inline (-e
) Skrip Perl yang mengambil semua baris dari stdin
, lalu, untuk setiap baris ini, lakukan penggantian yang sama seperti pada contoh pertama di atas, lalu cetak.
atau
awk '{if(/potato:/) print $2}' < file.txt
File dikirim melalui stdin
(< file.txt
mengirimkan isi file melalui stdin
ke perintah di sebelah kiri) ke awk
skrip itu, untuk setiap baris yang berisi potato:
(if(/potato:/)
mengembalikan nilai true jika regular expression /potato:/
cocok dengan baris saat ini), mencetak kolom kedua, seperti dijelaskan di atas.
atau
perl -e 'for(<>){/potato:/ && s/^.*: // && print}' < file.txt
File dikirim melalui stdin
(< file.txt
, lihat di atas) ke skrip Perl yang bekerja mirip dengan yang di atas, tetapi kali ini juga memastikan setiap baris berisi string potato:
(/potato:/
adalah ekspresi reguler yang cocok jika baris saat ini berisi potato:
, dan, jika ya (&&
), lalu mulai menerapkan ekspresi reguler yang dijelaskan di atas dan mencetak hasilnya).