অজস্র ক্ষেত্রে কেস-সংবেদনশীল অনুসন্ধান


20

আমাকে awk ব্যবহার করে কোনও কীওয়ার্ড অনুসন্ধান করতে হবে তবে আমি কেস-সংবেদনশীল (অ কেস সংবেদনশীল) অনুসন্ধান করতে চাই।

আমি মনে করি যে অনুসন্ধানের শব্দটি ("কী শব্দ") এবং যে লক্ষ্যবিন্দুটি একই সাথে যে সময়ে একই সাথে পড়ছে তা উভয়কেই মূলধনটিই সর্বোত্তম পন্থা। এই প্রশ্নটি থেকে আমি কীভাবে toupperসমস্ত বড় আকারের মুদ্রণ করতে ব্যবহার করব, তবে আমি এটি কোনও ম্যাচে কীভাবে ব্যবহার করব তা জানি না কারণ এই উত্তরটি কেবল মুদ্রণ দেখায় এবং বড় হাতের অক্ষরটি একটি ভেরিয়েবেলে রেখে দেয় না।

এই ইনপুট প্রদত্ত একটি উদাহরণ এখানে দেওয়া হয়েছে:

blablabla    
&&&Key Word&&&
I want all 
these text and numbers 123
and chars !"£$%&
as output
&&&KEY WORD&&&
blablabla

আমি এই আউটপুট চাই:

I want all 
these text and numbers 123
and chars !"£$%&
as output

এটি আমার কাছে রয়েছে তবে আমি কীভাবে যুক্ত করব তা জানি না toupper:

awk "BEGIN {p=0}; /&&&key word&&&/ { p = ! p ; next } ; p { print }" text.txt

উত্তর:


23

বর্তমান লাইনটি /&&&key word&&&/স্পষ্টভাবে ব্যবহার করে অন্য একটি অভিব্যক্তির সাথে কোনও প্যাটার্নের সাথে (যেমন ) মেলে আপনার অভিব্যক্তিটি প্রতিস্থাপন করুন $0:

tolower($0) ~ /&&&key word&&&/

অথবা

toupper($0) ~ /&&&KEY WORD&&&/

সুতরাং তোমার আছে

awk 'tolower($0) ~ /&&&key word&&&/ { p = ! p ; next }; p' text.txt

আপনার একক উদ্ধৃতি প্রয়োজন কারণ $0, চলকগুলিকে ডিফল্টরূপে ""বা 0প্রথম ব্যবহারের ক্ষেত্রে আরম্ভ করা হওয়ায় বিগিন ব্লকটি সরানো যেতে পারে এবং {print}নীচের মন্তব্যে উল্লিখিত ডিফল্ট ক্রিয়া is


4
নোট করুন যে আপনি এটি সহজ করতে পারেন awk 'toupper($0)~/&&&KEY WORD&&&/ { p = ! p ; next } ; p;' text.txtBEGINব্লকের প্রয়োজন নেই এবং যেহেতু ডিফল্ট ক্রিয়াটি মুদ্রণ p;করা যথেষ্ট , তাই যথেষ্ট।
টেরডন

1
" BEGINব্লকের কোনও প্রয়োজন নেই " যেহেতু অবিচ্ছিন্ন ভেরিয়েবলটি মিথ্যা হিসাবে মূল্যায়ন করে।
গ্লেন জ্যাকম্যান

অপটিমাইজেশনের জন্য ধন্যবাদ। আমি সাধারণত আমার জবাবটি মূলের মধ্যে সর্বনিম্ন পরিবর্তনগুলিতে সীমাবদ্ধ করার চেষ্টা করি তবে এটি সত্য যে নতুন ফলাফলটি আরও কঠোর এবং বেশ পঠনযোগ্য।
meuh

2
কেবল একটি নোট: tolowerপ্রাচীন (বা অত প্রাচীন নয়) উইন্ড সংস্করণগুলিতে (উদা: এআইএক্স) সিস্টেমে উপস্থিত রয়েছে তবে toupperসর্বদা পাওয়া যায় না ^^ ^^
অলিভিয়ার ডুলাক

16

গাওকের একটি IGNORECASEবিল্টিন ভেরিয়েবল রয়েছে, যা যদি ননজারোতে সেট করা থাকে তবে সমস্ত স্ট্রিং এবং নিয়মিত এক্সপ্রেশন তুলনা কেস-সংবেদনশীল হতে পারে। আপনি এটি ব্যবহার করতে পারেন:

BEGIN{IGNORECASE=1}
/&&&key word&&&/ { foo bar baz }

ইত্যাদি এটি সুনির্দিষ্ট gawk, তবে আমি এটি meuh দ্বারা বিকল্প (আরও বহনযোগ্য) বিকল্পের চেয়ে বেশি পঠনযোগ্য বলে মনে করি। সমস্যাটি কিনা তা সম্পূর্ণরূপে আপনার উপর নির্ভর করে।


1
আমি আমার সবচেয়ে বড় গোক প্রকল্পে বছরের পর বছর ধরে অ্যাডকে সমর্থন করতে চেয়েছিলাম, তবে সংক্ষিপ্ত অনুসন্ধানের সূত্রপাত না করায় যে সংঘটিত সংঘটিত অনুসন্ধানের কাজ সংখ্যক সংখ্যক অনুসন্ধানের কারণে সংঘটিত হয়েছে তা সংঘটিত হয়েছে non জেনসব হ'ল অন্যান্য গোকের কেবলমাত্র বৈশিষ্ট্য যা অ্যাজকে প্রতিস্থাপন করা খুব কঠিন ছিল। তবে গাওক সবসময় কিছু মেশিন এবং বিতরণে ডিফল্টরূপে ইনস্টল হয় না যদিও এটি প্রায় সর্বদা পাওয়া যায় তবে এটি দুর্ভাগ্যজনক যে ২০১ 2016 সালের মধ্যে তারা এই জাতীয় স্ট্যান্ডার্ড সরঞ্জামগুলির কার্যকারিতা কিছুটা প্রসারিত করতে বিশৃঙ্খলা ও পিক্সিক পরিবর্তন করতে পারেনি।
Lizardx

3
@ লিজার্ডেক্স: এটি প্রসারিত না করার পুরো বিষয়: এটি স্ট্যান্ডার্ড রাখুন। অন্যথায় আপনি কেবল অন্য একটি মান তৈরি করেন, এবং তারপরে তাদের মধ্যে কিছুটা অসম্পূর্ণতা রয়েছে (তারা এটি করে তবে মানক পরিবর্তনকে সর্বনিম্ন রাখার চেষ্টা করুন ... তারপরেও, একাধিক স্ট্যান্ডার্ডটি কম্পিউটিংয়ের অন্যতম প্রধান
দুর্ভাগ্য

2
আমি রাজি নই। সাবধানতার সাথে কার্যকর করার মাধ্যমে, আপনি সমস্ত উত্তরাধিকার পদ্ধতি সমর্থন করার সময় বিস্তৃতি প্রবর্তন করতে পারেন, যদি আপনি এটি করতে ব্যর্থ হন তবে কি হবে যে জিনিসগুলি কেবল সময়ের সাথে সাথে অপ্রাসঙ্গিকতায় ম্লান হতে শুরু করে। কম্পিউটিংয়ের সবকিছু বিকশিত হয়, কৌশলটি একটি খুব স্থিতিশীল নির্ভরযোগ্য বিবর্তন বজায় রাখা। বাশ এটি করার একটি দুর্দান্ত উদাহরণ, সুপার নির্ভরযোগ্য এবং কেবল নতুন বৈশিষ্ট্য যুক্ত করুন, এটি এতটা 'দুটি মান' নয়, যা সমর্থিত তা ব্যবহার করুন এবং একবার বিশ্বব্যাপী পরিবর্তনগুলি পরিবর্তন হয়ে গেলে আপনি নতুন বৈশিষ্ট্যগুলি ব্যবহার শুরু করতে পারেন কারণ কেবলমাত্র প্রাচীনতম লিগ্যাসি সিস্টেমগুলির সমর্থন থাকবে না।
Lizardx
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.