Bagaimana cara mencocokkan kata hanya antara tanda kurung
Memasukkan :
this is (test.com)
Output Keinginan:
test.com
Bagaimana cara mencocokkan kata hanya antara tanda kurung
Memasukkan :
this is (test.com)
Output Keinginan:
test.com
Jawaban:
Berikut adalah beberapa opsi, yang semuanya mencetak output yang diinginkan:
Menggunakan grep
dengan -o
flag (hanya bagian pencocokan cetak baris) dan ekspresi reguler yang kompatibel dengan Perl ( -P
) yang dapat melakukan lookaround :
printf "this is (test.com)\n" | grep -Po '(?<=\().*(?=\))'
Regex itu mungkin perlu dijelaskan:
(?<=\()
: Ini adalah tampilan positif di belakang , format umumnya (?<=foo)bar
dan yang akan cocok dengan semua kasus yang bar
ditemukan setelah foo
. Dalam hal ini, kami mencari tanda kurung buka, jadi kami gunakan \(
untuk menghindarinya.
(?=\))
: Ini adalah lookahead positif dan hanya cocok dengan tanda kurung tutup.
The -o
pilihan untuk grep
penyebab itu hanya mencetak bagian cocok dari setiap baris, sehingga kita mencari apa yang ada di kurung dan kemudian menghapusnya dengan sed
:
printf "this is (test.com)\n" | grep -o '(.*)' | sed 's/[()]//g'
Mengurai semuanya dengan Perl:
printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
Pisahkan semuanya dengan sed
:
printf "this is (test.com)\n" | sed 's/.*(\(.*\))/\1/'
Salah satu pendekatan adalah menggunakan PCRE - Ekspresi Reguler Kompatibel Perl dengan grep
:
$ echo "this is (test.com)" | grep -oP '(?<=\().*(?=\))'
test.com