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 grepdengan -oflag (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)bardan yang akan cocok dengan semua kasus yang barditemukan 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 -opilihan untuk greppenyebab 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