পুরো পার্ল নিয়মিত এক্সপ্রেশন সাপোর্ট (যা আপনি শেডের সাথে যা পান তার চেয়ে অনেক বেশি শক্তিশালী) এর সুবিধা নিয়ে আপনি সেডের মতো পার্ল ওয়ান-লাইনার ব্যবহার করতে পারেন । * নিক্স প্ল্যাটফর্মগুলিতেও খুব কম পার্থক্য রয়েছে - পার্লটি সাধারণত পার্ল। সুতরাং আপনি কীভাবে আপনার নির্দিষ্ট সিস্টেমের সেডের সংস্করণটি চান তা করতে পারে তা নিয়ে আপনি দুশ্চিন্তা বন্ধ করতে পারেন।
এই ক্ষেত্রে, আপনি করতে পারেন
perl -pe 's/(regex)/\n$1/'
-pe
পার্লকে "এক্সিকিউট এবং প্রিন্ট" লুপে রাখে, অনেকটা সিডের অপারেশনের সাধারণ মোডের মতো।
'
শেল হস্তক্ষেপ করবে না তাই অন্য সব কিছু উদ্ধৃত করে
()
রেজেক্সকে ঘিরে একটি গ্রুপিং অপারেটর। $1
প্রতিস্থাপনের ডানদিকে এই পেরেনগুলির মধ্যে যা কিছু মিলেছে তা মুদ্রণ করে।
অবশেষে, \n
একটি নতুন লাইন।
আপনি গ্রুপিং অপারেটর হিসাবে প্রথম বন্ধনী ব্যবহার করছেন কিনা তা বিবেচনা না করেই, আপনি মেলাতে চাইছেন এমন কোনও বন্ধনী এড়াতে হবে। সুতরাং উপরে উল্লিখিত প্যাটার্নটির সাথে মেলে একটি রেজেক্স এমন কিছু হবে
\(\d\d\d\)\d\d\d-\d\d\d\d
\(
বা \)
আক্ষরিক প্যারেনের সাথে \d
মেলে এবং একটি অঙ্কের সাথে মেলে।
উত্তম:
\(\d{3}\)\d{3}-\d{4}
আমি কল্পনা করেছি আপনি ব্র্যাকের সংখ্যাগুলি কী করছে তা নির্ধারণ করতে পারেন।
অতিরিক্ত হিসাবে, আপনি / আপনার রেগেক্সের জন্য ছাড়াও ডেলিফিটর ব্যবহার করতে পারেন। সুতরাং আপনার যদি মিলের প্রয়োজন হয় / আপনার এড়াতে হবে না। নীচের যে কোনওটি আমার উত্তরের শুরুতে রেজেক্সের সমতুল্য। তত্ত্ব অনুসারে আপনি মান / মানগুলির জন্য যে কোনও অক্ষরকে প্রতিস্থাপন করতে পারেন ।
perl -pe 's#(regex)#\n$1#'
perl -pe 's{(regex)}{\n$1}'
একটি দম্পতি চূড়ান্ত চিন্তা।
একইভাবে ব্যবহারের -ne
পরিবর্তে ব্যবহার করে -pe
, তবে শেষের দিকে স্বয়ংক্রিয়ভাবে মুদ্রণ হয় না। আপনি নিজের মুদ্রণ করতে চাইলে এটি কার্যকর হতে পারে। উদাহরণস্বরূপ, এখানে একটি গ্রেপ-অ্যালাইক ( m/foobar/
এটি একটি রিজেক্স ম্যাচ):
perl -ne 'if (m/foobar/) {print}'
যদি আপনি নিউলাইনগুলি সমস্যাজনক হিসাবে দেখেন এবং আপনি এটি যাদুতে আপনার জন্য পরিচালনা করতে চান তবে যোগ করুন -l
। যদিও নতুন লাইনের সাথে কাজ করছিলেন ওপি, তার পক্ষে কার্যকর নয়।
বোনাস টিপ - আপনার যদি পিসিআর প্যাকেজ ইনস্টল করা থাকে তবে এটি আসে pcregrep
, যা পুরো পার্ল-সামঞ্জস্যপূর্ণ রেজিক্সগুলি ব্যবহার করে।
sed '/regex/G'