Karena Anda perlu mencocokkan konten tanpa menyertakannya dalam hasil (harus cocok name="
tetapi bukan bagian dari hasil yang diinginkan), diperlukan beberapa bentuk pencocokan lebar-nol atau pengambilan kelompok. Ini dapat dilakukan dengan mudah dengan alat-alat berikut:
Perl
Dengan Perl Anda dapat menggunakan n
opsi untuk memutar baris demi baris dan mencetak konten dari grup penangkap jika cocok:
perl -ne 'print "$1\n" if /name="(.*?)"/' filename
GNU grep
Jika Anda memiliki versi grep yang ditingkatkan, seperti GNU grep, Anda mungkin memiliki -P
opsi yang tersedia. Opsi ini akan mengaktifkan regex seperti Perl, memungkinkan Anda untuk menggunakan \K
tampilan singkat. Ini akan mengatur ulang posisi pertandingan, jadi apa pun sebelumnya adalah lebar nol.
grep -Po 'name="\K.*?(?=")' filename
The o
merek pilihan grep mencetak hanya teks yang cocok, bukan seluruh baris.
Vim - Editor Teks
Cara lain adalah dengan menggunakan editor teks secara langsung. Dengan Vim, salah satu dari berbagai cara untuk menyelesaikan ini adalah dengan menghapus baris tanpa
name=
dan kemudian mengekstrak konten dari baris yang dihasilkan:
:v/.*name="\v([^"]+).*/d|%s//\1
Grep standar
Jika Anda tidak memiliki akses ke alat ini, karena alasan tertentu, sesuatu yang serupa dapat dicapai dengan grep standar. Namun, tanpa melihat-lihat, ini akan membutuhkan pembersihan nanti:
grep -o 'name="[^"]*"' filename
Catatan tentang menyimpan hasil
Dalam semua perintah di atas, hasil akan dikirim ke stdout
. Penting untuk diingat bahwa Anda selalu dapat menyimpannya dengan menyalurkannya ke file dengan menambahkan:
> result
ke akhir perintah.