GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara memahami konten setelah pola?

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).


Linux
  1. Bagaimana Memulihkan Data Xfs Setelah Rm?

  2. Linux – Bagaimana Mengetahui Apa yang Harus Diambil Di Dmesg?

  3. Grep Bagaimana Cara Menekan Tampilan File yang Tidak Cocok?

  1. Cara memahami keluaran warna

  2. Bagaimana cara 'menangkap' aliran berkelanjutan?

  3. Bagaimana cara memeriksa apakah suatu file kosong di Bash?

  1. Bagaimana cara mengonversi ISO8859-15 ke UTF8?

  2. Cara grep \n dalam file

  3. Cara grep bagian file di bash shell