গ্রেপ: প্রথম বন্ধনীর মধ্যে যে কোনও কিছুর মিলের জন্য রেজেক্স


21

আমি কীভাবে কেবল প্রথম বন্ধনের মধ্যে শব্দের সাথে মেলে

ইনপুট : this is (test.com)

ইচ্ছা আউটপুট: test.com


1
আপনি কি 'গ্রেপ' রেগেক্সের সাথে মেলে, বা, যেমন, একটি আউটপুট দেখানো আপনার আউটপুট উত্পন্ন করার জন্য বিকল্প কমান্ডের সন্ধান করছেন?
rickhg12hs

উত্তর:


28

এখানে কয়েকটি অপশন রয়েছে, যার সবগুলিই পছন্দসই আউটপুট প্রিন্ট করে:

  1. ব্যবহার grepসঙ্গে -oপতাকা এবং পার্ল সামঞ্জস্যপূর্ণ রেগুলার এক্সপ্রেশনের ((শুধুমাত্র লাইনের অংশ মিলে প্রিন্ট) -P) তা করতে পারে lookarounds :

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

    এই রেজেক্সের কিছু ব্যাখ্যা দেওয়ার দরকার হতে পারে:

    • (?<=\(): এটি একটি ইতিবাচক চেহারা , সাধারণ ফর্ম্যাট (?<=foo)barএবং barএটি ঠিক পরে পাওয়া সমস্ত ক্ষেত্রে মিলবে foo। এই ক্ষেত্রে, আমরা একটি খোলার প্রথম বন্ধনী খুঁজছি, সুতরাং আমরা \(এড়াতে ব্যবহার করি।

    • (?=\)): এটি ইতিবাচক চেহারা এবং এটি বন্ধ প্যারেন্সেসিসের সাথে কেবল মেলানো।

  2. -oবিকল্প grepকারণ এটি শুধুমাত্র কোনো লাইনের মিলেছে অংশ প্রিন্ট করতে তাই আমরা যাই হোক না কেন প্রথম বন্ধনী এবং তারপর তাদের সঙ্গে মুছতে জন্য চেহারা sed:

    printf "this is (test.com)\n" | grep -o '(.*)' | sed 's/[()]//g'
    
  3. পার্লের সাথে পুরো জিনিসটি পার্স করুন:

    printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
    
  4. পুরো জিনিসটি এর সাথে পার্স করুন sed:

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.