grep: regex, yalnızca parantez arasında bir şey eşleşmesi için


21

Kelimeyi yalnızca parantez arasında eşleştiririm

Giriş: this is (test.com)

Arzu Çıkışı: test.com


1
Eşleşecek bir 'grep' regex'i mi, yoksa gösterilen çıktınızı oluşturmak için bir 'sed' yedek komutu mu arıyorsunuz?
rickhg12hs

Yanıtlar:


28

İstediğiniz çıktıyı basan birkaç seçenek:

  1. Kullanımı grepile -obayrak ve Perl uyumlu düzenli ifadeler ((sadece çizgi bir kısmıyla eşleşen baskı) -Pyapabilir) lookarounds :

    printf "this is (test.com)\n" | grep -Po '(?<=\().*(?=\))'
    

    Bu regex biraz açıklamaya ihtiyaç duyabilir:

    • (?<=\(): Bu olumlu bir bakış açısıdır , genel formattır (?<=foo)barve barhemen sonra bulunan tüm vakalarla eşleşir foo. Bu durumda açılış parantezi arıyoruz, bu yüzden ondan \(kaçmak için kullanıyoruz.

    • (?=\)): Bu olumlu bir bakış açısı ve basitçe kapanış paranteziyle eşleşiyor.

  2. -oSeçeneği grepbiz parantez içinde ve daha sonra bunları silmek ne olursa olsun aramaya böylece nedenleri sadece, herhangi bir satırın eşleşen parçası yazdırmak için sed:

    printf "this is (test.com)\n" | grep -o '(.*)' | sed 's/[()]//g'
    
  3. Her şeyi Perl ile ayrıştır:

    printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
    
  4. Her şeyi ayrıştır sed:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.