grep: regex hanya untuk mencocokkan apa pun di antara tanda kurung

21

Bagaimana cara mencocokkan kata hanya antara tanda kurung

Memasukkan : this is (test.com)

Output Keinginan: test.com

Rahul Patil
sumber
1
Apakah Anda mencari regex 'grep' yang cocok, atau, misalnya, perintah pengganti 'sed' untuk menghasilkan output yang ditampilkan?
rickhg12hs

Jawaban:

28

Berikut adalah beberapa opsi, yang semuanya mencetak output yang diinginkan:

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

  2. 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'
    
  3. Mengurai semuanya dengan Perl:

    printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
    
  4. Pisahkan semuanya dengan sed:

    printf "this is (test.com)\n" | sed 's/.*(\(.*\))/\1/'
    
terdon
sumber