2 বিভিন্ন লাইনের জন্য গ্রিপ কীভাবে ব্যবহার করবেন


15

আমি যখন একটি একক grepকমান্ড ব্যবহার করে দুটি পৃথক লাইনে থাকি তখন আমি কীভাবে দুটি পৃথক বাক্যাংশ অনুসন্ধান করতে পারি ?

উদাহরণ স্বরূপ

লাইন 1: এটি একটি মিষ্টি।

লাইন 2: লেবু।

আমি এটি ব্যবহার করেছি তবে কোনও ফল হয়নি

grep "sweet.*lemon" file_type

উত্তর:


20

grepদুটি ভিন্ন লাইন ব্যবহার করতে , উভয় নিদর্শন সন্ধান করুন

$ grep -e sweet -e lemon file_type
This is a sweet
lemon.

বা বিকল্প ব্যবহার করুন

$ grep -E 'sweet|lemon' file_type
This is a sweet
lemon.

কোনও প্যাটার্নের পরে পরবর্তী লাইনটি পেতে, আপনি প্রসঙ্গ বিকল্পটি ব্যবহার করতে পারেন

$ grep -A1 sweet file_type
This is a sweet
lemon.

তবে আপনি যদি একাধিক লাইন প্যাটার্ন, জন্য স্পষ্টভাবে অনুসন্ধান করছেন যদি যে চতুর কারণ grepলাইনে মনে ... । আপনার লাইনে.* "মিষ্টি" এবং "লেবু" এর মধ্যে সমস্ত কিছু ধরা পড়বে । আমরা নতুন লাইনের সাথে ম্যাচ করার জন্য এবং ফাইলটি নাল দিয়ে আলাদা করে বলার মাধ্যমে পরবর্তী লাইনে "লেবু" পেতে পারি :-P\ngrep-z

$ grep -zPo 'This is a sweet\nlemon' file_type
This is a sweet
lemon.

মন্তব্য:

  • -Eবর্ধিত নিয়মিত এক্সপ্রেশন ব্যবহার করুন ( |এটিকে চালানোর প্রয়োজন ছাড়াই বিকল্পের চরিত্রটি ব্যবহার করতে)
  • -An প্যাটার্নের পরে অতিরিক্ত রেখাগুলি মুদ্রণ করুন, যেখানে n প্রিন্ট করার জন্য পিছনের লাইনের সংখ্যা
  • -Pপার্ল-স্টাইলের নিয়মিত এক্সপ্রেশনগুলি ব্যবহার করুন ( আরও ভাল পার্ল রেজেক্স সহায়তার জন্য "পরীক্ষামূলক" ইন grep-ইনস্টল pcregrepকরুন)
  • -zবিভাজক হিসাবে নাল চরিত্রটি ব্যবহার করুন (কেবলমাত্র এই ক্ষেত্রে ভান করে তবে grepএটির জন্য আমাদের শব্দটি গ্রহণ করবে)
  • -o কেবল মিলিত অংশটি মুদ্রণ করুন

যদিও grep -zPকমান্ড এই নির্দিষ্ট ক্ষেত্রে কাজ করবে (ক ফাইল ঠিক দুই লাইন গঠিত) এটিকে সাধারণ, কোনো সাধারণ সম্পর্কে newline বিভাজিত ফাইল বিবেচনা করবে একটি একক লাইন হতে হবে যাতে পারেন পুরো ফাইলের বিষয়বস্তু ডাম্প (একটি ম্যাচ কোথাও নেই যদি থাকে) অথবা কিছুই না; সাধারণত এটি লোকেরা ব্যবহার grepকরেন না।
মার্ক ভ্যান লিউউইন

হ্যাঁ এটি কেবলমাত্র -o... সম্পাদিত ... দিয়ে কার্যকর ...
জান্না

যদি অন্য ডিস্ট্রোজে এটি চেষ্টা করা হয়, আপনি মুখোমুখি হতে পারেন: grep: The -P and -z options cannot be combined- যেমন
গ্রেপ

6

এটার মত:

grep "sweet\|lemon"

দুঃখিত তবে এটি সঠিক "মিষ্টি | লেবু" এর সাথে
মিলবে

4
@ ক্যাসিয়াএ এই লাইনের কাজ ঠিক আছে। grep"স্ট্যান্ডার্ড মোড" এ ডিফল্ট কাজ, যেখানে "বিশেষ অক্ষর" মত দ্বারা |, +, *আক্ষরিক ব্যাখ্যা করা হয় , যদি না তারা একটি ব্যাকস্ল্যাশ সঙ্গে ছদ্মবেশী করছি। উদাহরণস্বরূপ এই উত্তরটি দেখুন । আপনি সম্ভবত যেভাবে ব্যবহার করেছেন সেটিকে ব্যবহার করতে, সেই "বিশেষ অক্ষরগুলি" অক্ষরে অক্ষরে ব্যাখ্যা করার জন্য মুখোশ দেওয়া দরকার, আপনাকে "বর্ধিত মোড" ( grep -E) এ স্যুইচ করতে হবে । হয়তো madneon তার উত্তরের উপর একটি বিট আরো সম্প্রসারিত করতে পারে, উদাহরণস্বরূপ কি Ops চেষ্টা করবে মিলেছে আছে?
হেনিং কোকারবেকে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.