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ı grep
ile -o
bayrak ve Perl uyumlu düzenli ifadeler ((sadece çizgi bir kısmıyla eşleşen baskı) -P
yapabilir) 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)bar
ve bar
hemen 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.
-o
Seçeneği grep
biz 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