Kelimeyi yalnızca parantez arasında eşleştiririm
Giriş:
this is (test.com)
Arzu Çıkışı:
test.com
Kelimeyi yalnızca parantez arasında eşleştiririm
Giriş:
this is (test.com)
Arzu Çıkışı:
test.com
Yanıtlar:
İstediğiniz çıktıyı basan birkaç seçenek:
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.
-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'
Her şeyi Perl ile ayrıştır:
printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
Her şeyi ayrıştır sed:
printf "this is (test.com)\n" | sed 's/.*(\(.*\))/\1/'
Bir yaklaşım kullanmak olacaktır PCRE - Perl Uyumlu Düzenli İfadeler ile grep:
$ echo "this is (test.com)" | grep -oP '(?<=\().*(?=\))'
test.com