আমি কীভাবে কেবল প্রথম বন্ধনের মধ্যে শব্দের সাথে মেলে
ইনপুট :
this is (test.com)
ইচ্ছা আউটপুট:
test.com
আমি কীভাবে কেবল প্রথম বন্ধনের মধ্যে শব্দের সাথে মেলে
ইনপুট :
this is (test.com)
ইচ্ছা আউটপুট:
test.com
উত্তর:
এখানে কয়েকটি অপশন রয়েছে, যার সবগুলিই পছন্দসই আউটপুট প্রিন্ট করে:
ব্যবহার grep
সঙ্গে -o
পতাকা এবং পার্ল সামঞ্জস্যপূর্ণ রেগুলার এক্সপ্রেশনের ((শুধুমাত্র লাইনের অংশ মিলে প্রিন্ট) -P
) তা করতে পারে lookarounds :
printf "this is (test.com)\n" | grep -Po '(?<=\().*(?=\))'
এই রেজেক্সের কিছু ব্যাখ্যা দেওয়ার দরকার হতে পারে:
(?<=\()
: এটি একটি ইতিবাচক চেহারা , সাধারণ ফর্ম্যাট (?<=foo)bar
এবং bar
এটি ঠিক পরে পাওয়া সমস্ত ক্ষেত্রে মিলবে foo
। এই ক্ষেত্রে, আমরা একটি খোলার প্রথম বন্ধনী খুঁজছি, সুতরাং আমরা \(
এড়াতে ব্যবহার করি।
(?=\))
: এটি ইতিবাচক চেহারা এবং এটি বন্ধ প্যারেন্সেসিসের সাথে কেবল মেলানো।
-o
বিকল্প grep
কারণ এটি শুধুমাত্র কোনো লাইনের মিলেছে অংশ প্রিন্ট করতে তাই আমরা যাই হোক না কেন প্রথম বন্ধনী এবং তারপর তাদের সঙ্গে মুছতে জন্য চেহারা sed
:
printf "this is (test.com)\n" | grep -o '(.*)' | sed 's/[()]//g'
পার্লের সাথে পুরো জিনিসটি পার্স করুন:
printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
পুরো জিনিসটি এর সাথে পার্স করুন sed
:
printf "this is (test.com)\n" | sed 's/.*(\(.*\))/\1/'
একটা পদক্ষেপ ব্যবহার করতে হবে PCRE - পার্ল সামঞ্জস্যপূর্ণ রেগুলার এক্সপ্রেশন সঙ্গে grep
:
$ echo "this is (test.com)" | grep -oP '(?<=\().*(?=\))'
test.com