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 -Popsi yang tersedia. Opsi ini akan mengaktifkan regex seperti Perl, memungkinkan Anda untuk menggunakan \Ktampilan 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.