একটি ভিম রিপ্লেস এবং পার্ল পাই প্রতিস্থাপনের মধ্যে রূপান্তর করা


0

সুতরাং আমার কাছে একটি ফাইল টেস্ট টেক্সট রয়েছে, এতে রয়েছে,

home -> range

আমি যদি ভিএম-তে ফাইলটি সম্পাদনা করি এবং কমান্ডটি চালিত করি তবে %s/^\(.*\)->\(.*\)$/\2 ::= \1 ;/gএটি ফাইলকে রূপান্তর করে

range ::= home  ;

যা আমি চাই তবে আমি যদি দৌড়ে যাই

 perl -pi -e 's/^\(.*\)->\(.*\)$/\2 ::= \1 ;/g' test.txt

যা আমার মনে হয় এটি করা উচিত, আমি কোনও পরিবর্তন পাই না - কেউ কি আমাকে বলতে পারে যে কী ভুল হয়েছে? আমার সন্দেহ হয় যে কিছু পালাতে হবে তবে আমি এড়িয়ে যাওয়ার সমস্ত ধরণের সংমিশ্রণ ফেলেছি ... আরও দুটি বিন্যাসের মধ্যে রূপান্তর সম্পর্কে আমি কিছু সাধারণ নিয়ম চাই ...

উত্তর:


1

পার্লে আপনি ক্যাপচারিং বন্ধনীগুলি এড়াতে পারবেন না, এছাড়াও ক্যাপচারিং ভেরিয়েবলের জন্য \ 1, \ 2 এর পরিবর্তে $ 1, $ 2 ব্যবহার করা প্রচলিত।

perl -pi -e 's/^(.*)->(.*)$/$2 ::= $1 ;/g' test.txt

এটি জীবনের দুর্ভাগ্যজনক সত্য যে প্রচলিত সাধারণ সরঞ্জামগুলিতে ( ভিএম , সেড , অ্যাজক , পার্ল) ব্যবহৃত রেজিেক্সস (আরই) সমস্তই আলাদা আলাদা। কিছু সরঞ্জামের পার্ল আরইএস, পসিক্স বেসিক আরইস (বিআরই) বা পসিক্স এক্সটেন্ডেড আরইএস (ইআরই) ব্যবহার করার বিকল্প রয়েছে।


perldoc perlreএকটি বিকল্প প্রতিস্থাপনের প্রতিস্থাপন অংশে $1বনাম বলতে এই আছে\1

কিছু লোক এ জাতীয় জিনিস লিখতে অভ্যস্ত হন:

$pattern =~ s/(\W)/\\\1/g;

এই নেশা মাদকাসক্তদের ধাক্কা এড়ানোর জন্য এটি বিকল্পের আরএইচএসের জন্য দাদাগিরি, তবে এটি প্রবেশ করা একটি নোংরা অভ্যাস। কারণ পার্লথিংকে, "s ///" এর ডান হাতটি একটি ডাবল-কোটেড স্ট্রিং। সাধারণ ডাবল-কোটেড স্ট্রিংয়ের "\ 1" এর অর্থ একটি নিয়ন্ত্রণ-এ। "/ 1" এর কাস্টম-অ্যারি ইউনিক্স অর্থ "s ///" এর জন্য নিযুক্ত করা হয়েছে। তবে, যদি আপনি এটি করার অভ্যাসে পান তবে আপনি "/ ই" পরিবর্তনকারী যুক্ত করলে আপনি নিজেকে সমস্যার মধ্যে ফেলবেন।

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