অ্যান্ড্রয়েড

লিনাক্সে গ্রেপ কমান্ড (ফাইলগুলিতে পাঠ্য সন্ধান করুন)

জুডি অ্যান সূর্যের লাইফ Grepa মাধ্যমে সুরক্ষিত জীবন সম্পর্কে আলোচনা

জুডি অ্যান সূর্যের লাইফ Grepa মাধ্যমে সুরক্ষিত জীবন সম্পর্কে আলোচনা

সুচিপত্র:

Anonim

“গ্লোবাল রেগুলার এক্সপ্রেশন প্রিন্ট” এর জন্য দাঁড়িয়ে থাকা grep কমান্ডটি লিনাক্সের অন্যতম শক্তিশালী এবং সাধারণভাবে ব্যবহৃত কমান্ড।

গ্রেপ একটি প্রদত্ত প্যাটার্নের সাথে মেলে এমন প্রতিটি লাইনের জন্য এক বা একাধিক ইনপুট ফাইল সন্ধান করে এবং প্রতিটি মিলে যাওয়া লাইনটি স্ট্যান্ডার্ড আউটপুটে লেখায়। যদি কোনও ফাইল নির্দিষ্ট না করা থাকে তবে grep স্ট্যান্ডার্ড ইনপুট থেকে পড়ে, যা সাধারণত অন্য কমান্ডের আউটপুট।

এই টিউটোরিয়ালে, আমরা আপনাকে ব্যবহারিক উদাহরণগুলির মাধ্যমে grep কমান্ডটি কীভাবে ব্যবহার করতে হবে এবং সর্বাধিক সাধারণ জিএনইউ grep বিকল্পগুলির বিশদ বিবরণ প্রদর্শন করব।

গ্রেপ কমান্ড সিনট্যাক্স

grep কমান্ডটি কীভাবে ব্যবহার করা যায় তার আগে আসুন বেসিক সিনট্যাক্সটি পর্যালোচনা করে শুরু করা যাক।

grep ইউটিলিটি এক্সপ্রেশন নিম্নলিখিত ফর্মটি গ্রহণ করে:

grep PATTERN

বর্গাকার বন্ধনীগুলির আইটেমগুলি areচ্ছিক।

  • বিকল্পগুলি - জিরো বা আরও বিকল্প। গ্রেপ এমন অনেকগুলি বিকল্প সরবরাহ করে যা এর আচরণ নিয়ন্ত্রণ করে। প্যাটার্ন - অনুসন্ধানের PATTERN FILE - জিরো বা আরও ইনপুট ফাইলের নাম।

ফাইলটি অনুসন্ধানে সক্ষম হতে, কমান্ডটি ব্যবহারকারী ব্যবহারকারীর অবশ্যই ফাইলটিতে অ্যাক্সেস পড়তে হবে।

ফাইলগুলিতে একটি স্ট্রিং সন্ধান করতে কীভাবে grep ব্যবহার করবেন

grep কমান্ডের সর্বাধিক প্রাথমিক ব্যবহার হ'ল কোনও ফাইলের স্ট্রিং (পাঠ্য) অনুসন্ধান করা।

উদাহরণস্বরূপ, স্ট্রিং /etc/passwd ফাইলের লাইনগুলি প্রদর্শন করতে আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

grep bash /etc/passwd

আউটপুটটি দেখতে কিছুটা দেখতে পাওয়া উচিত:

root:x:0:0:root:/root:/bin/bash linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash

যদি স্ট্রিংয়ের স্পেস থাকে তবে আপনাকে এটি একক বা ডাবল উদ্ধৃতি চিহ্নগুলিতে আবদ্ধ করতে হবে:

grep "Gnome Display Manager" /etc/passwd

উল্টানো ম্যাচ (বাদ দিন)

কোনও প্যাটার্নের সাথে মেলে না এমন লাইনগুলি প্রদর্শন করতে -v (বা --invert-match ) বিকল্পটি ব্যবহার করুন।

উদাহরণস্বরূপ, /etc/passwd ফাইলের লাইনগুলি প্রদর্শন করতে যেখানে স্ট্রিং nologin আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

grep -v nologin /etc/passwd

root:x:0:0:root:/root:/bin/bash colord:x:124:124::/var/lib/colord:/bin/false git:x:994:994:git daemon user:/:/usr/bin/git-shell linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash

কমান্ড আউটপুট-এ স্ট্রিং অনুসন্ধান করতে কীভাবে গ্রেপ ব্যবহার করবেন

ইনপুট ফাইলগুলি নির্দিষ্ট করার পরিবর্তে, আপনি অন্য কমান্ডের আউটপুটটি গ্রেপ করতে পাইপ করতে পারেন এবং তারপরে একটি নির্দিষ্ট প্যাটার্নের সাথে মিলিয়ে কেবল লাইন প্রদর্শন করতে পারেন।

উদাহরণস্বরূপ, ব্যবহারকারী www-data হিসাবে আপনার সিস্টেমে কোন প্রক্রিয়াগুলি চলছে তা www-data আপনি নীচের ps কমান্ডটি ব্যবহার করতে পারেন:

ps -ef | grep www-data

www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process

আপনি কমান্ডে একাধিক পাইপ চেইন করতে পারেন। আপনি উপরের আউটপুটে দেখতে পাচ্ছেন সেখানে grep প্রক্রিয়া সম্বলিত একটি লাইনও রয়েছে। আপনি যদি না চান যে লাইনটি দেখানো হোক তবে নীচের মত প্রদর্শিত আউটপুটটিকে অন্য grep উদাহরণগুলিতে পাস করুন।

ps -ef | grep www-data | grep -v grep

www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process

পুনরাবৃত্ত অনুসন্ধান

পুনরাবৃত্তভাবে কোনও প্যাটার্নটি অনুসন্ধান করতে, -r বিকল্পটি (বা --recursive ) ব্যবহার করুন। এটি নির্দিষ্ট ডিরেক্টরিতে থাকা সমস্ত ফাইলগুলির মধ্যে অনুসন্ধান করবে এবং পুনরাবৃত্তভাবে সম্মুখীন হওয়া সিমলিঙ্কগুলি এড়িয়ে চলে। সমস্ত প্রতীকী লিঙ্কগুলি অনুসরণ করতে -R বিকল্পটি (বা --dereference-recursive ) ব্যবহার করুন।

নিম্নলিখিত উদাহরণে আমরা /etc ডিরেক্টরিতে সমস্ত ফাইলের স্ট্রিং linuxize.com অনুসন্ধান করছি:

grep -r linuxize.com /etc

কমান্ডটি ফাইলের পুরো পথ দ্বারা উপস্থাপিত মেলা লাইনগুলি মুদ্রণ করবে।

/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com;

এর পরিবর্তে -r আপনি -R বিকল্প ব্যবহার করুন -R সমস্ত প্রতীকী লিঙ্কগুলি অনুসরণ করবে:

grep -R linuxize.com /etc

আউটপুট এর শেষ লাইন লক্ষ্য করুন। উপরের উদাহরণে সেই লাইনটি প্রিন্ট করা হয়নি কারণ এনগিনেক্সের sites-enabled ডিরেক্টরিতে থাকা ফাইলগুলি sites-available ডিরেক্টরিতে কনফিগারেশন ফাইলের প্রতীক sy

/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com; /etc/nginx/sites-enabled/linuxize.com: server_name linuxize.com www.linuxize.com;

কেবল ফাইলের নাম দেখান

ডিফল্ট grep আউটপুট দমন করতে এবং মেলে প্যাটার্নযুক্ত ফাইলগুলির নাম মুদ্রণ করতে আপনি -l (বা - --files-with-matches ) বিকল্পটি ব্যবহার করতে পারেন।

উদাহরণস্বরূপ বর্তমান ওয়ার্কিং ডিরেক্টরিতে .conf দিয়ে শেষ হওয়া সমস্ত ফাইল অনুসন্ধান করতে এবং কেবলমাত্র linuxize.com ফাইলগুলির নাম মুদ্রণ করতে হবে:

grep -l linuxize.com *.conf

আউটপুটটি এরকম কিছু দেখবে:

tmux.conf haproxy.conf

-l বিকল্পটি সাধারণত পুনরাবৃত্তির বিকল্পের সাথে সংমিশ্রণে ব্যবহৃত হয় -R :

grep -Rl linuxize.com /tmp

কেস সংবেদনশীল অনুসন্ধান

ডিফল্টরূপে, grep কমান্ডটি কেস সেনসিটিভ। এর অর্থ হ'ল বড় হাতের অক্ষর এবং ছোট হাতের অক্ষরগুলি পৃথক হিসাবে বিবেচনা করা হয়।

অনুসন্ধানের ক্ষেত্রে কেস উপেক্ষা করার জন্য, -i বিকল্পটি (বা --ignore-case ) ব্যবহার করুন।

উদাহরণস্বরূপ, কোনও বিকল্প ছাড়াই Zebra অনুসন্ধান করার সময়, নিম্নলিখিত কমান্ডটি কোনও আউটপুট প্রদর্শন করবে না যেখানে মেলানো লাইন রয়েছে:

grep Zebra /usr/share/words

তবে আপনি যদি -i বিকল্পটি ব্যবহার করে কোনও কেস সংবেদনশীল অনুসন্ধান করেন তবে এটি উচ্চ এবং নিম্ন উভয় অক্ষরের সাথে মিলবে:

grep -i Zebra /usr/share/words

"জেব্রা" উল্লেখ করে সেই স্ট্রিংয়ের জন্য "জেব্রা", "জেব্রা" বা আপার এবং লোয়ার কেস অক্ষরের কোনও অন্য সমন্বয় মিলবে।

zebra zebra's zebras

পূর্ণ শব্দ অনুসন্ধান করুন

"Gnu" অনুসন্ধান করার সময়, grep সেই লাইনগুলিও প্রিন্ট করবে যেখানে "gnu" বৃহত্তর শব্দের এমবেড করা আছে, যেমন "সাইগনাস" বা "ম্যাগনাম"।

grep gnu /usr/share/words

cygnus gnu interregnum lgnu9d lignum magnum magnuson sphagnum wingnut

কেবলমাত্র সেই রেখাগুলিই ফিরিয়ে দিতে যেখানে নির্দিষ্ট স্ট্রিংটি পুরো শব্দ (নন-শব্দের অক্ষর দ্বারা আবদ্ধ) থাকে, -w (বা - --word-regexp ) বিকল্পটি ব্যবহার করুন।

শব্দের অক্ষরগুলিতে বর্ণমালার অক্ষর ( AZ , AZ এবং 0-9 ) এবং আন্ডারস্কোর ( _ ) অন্তর্ভুক্ত থাকে। অন্যান্য সমস্ত অক্ষরকে শব্দহীন অক্ষর হিসাবে বিবেচনা করা হয়।

grep -w gnu /usr/share/words

gnu

লাইন নম্বর প্রদর্শন করুন

একটি প্যাটার্নের সাথে মেলে এমন স্ট্রিং রয়েছে এমন রেখার সংখ্যাটি দেখানোর জন্য, -n (বা --line-number ) বিকল্পটি ব্যবহার করুন। এই বিকল্পটি ব্যবহার করার সময়, grep এটির যে লাইন নম্বরটি পাওয়া গিয়েছিল তার সাথে প্রিফিক্সড স্ট্যান্ডার্ড আউটপুটে মিলগুলি মুদ্রণ করবে।

উদাহরণস্বরূপ, স্ট্রিং bash /etc/services ফাইল থেকে রেখাগুলি প্রদর্শন করার জন্য আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

grep -n 10000 /etc/services

নীচের ফলাফলটি দেখায় যে ম্যাচগুলি 10423 এবং 10424 লাইনে পাওয়া যায়।

10423:ndmp 10000/tcp 10424:ndmp 10000/udp

ম্যাচ গণনা

মানক আউটপুটে মিলের লাইনের একটি গণনা মুদ্রণ করতে, -c (বা --count ) বিকল্পটি ব্যবহার করুন।

নীচের উদাহরণে, আমরা শেল হিসাবে /usr/bin/zsh থাকা অ্যাকাউন্টগুলির সংখ্যা গণনা করছি।

grep -c '/usr/bin/zsh' /etc/passwd

4

একাধিক স্ট্রিং (প্যাটার্নস) অনুসন্ধান করুন

দুই বা ততোধিক অনুসন্ধান নিদর্শনগুলি ওআর অপারেটর ব্যবহার করে যোগ দেওয়া যায় ।

ডিফল্টরূপে, grep প্যাটার্নটিকে একটি বেসিক নিয়মিত প্রকাশ হিসাবে ব্যাখ্যা করে যেখানে মেটা-অক্ষর যেমন | তাদের বিশেষ অর্থ হারিয়ে ফেলুন এবং তাদের ব্যাকস্ল্যাশড সংস্করণগুলি অবশ্যই ব্যবহার করা উচিত।

নীচের উদাহরণে আমরা এনজিনেক্স লগ ত্রুটি ফাইলটিতে fatal , error , এবং critical শব্দগুলির সমস্ত উপস্থিতি সন্ধান করছি:

grep 'fatal\|error\|critical' /var/log/nginx/error.log

grep -E 'fatal|error|critical' /var/log/nginx/error.log

শান্ত ভাব

--quiet (বা --quiet ) --quiet টার্মিনালে কিছু না লিখতে বলে (স্ট্যান্ডার্ড আউটপুট)। যদি কোনও মিল খুঁজে পাওয়া যায়, কমান্ডটি 0 সাথে প্রস্থান করবে। শেল স্ক্রিপ্টগুলিতে grep ব্যবহার করার সময় এটি দরকারী যেখানে আপনি কোনও ফাইলের স্ট্রিং রয়েছে কিনা তা পরীক্ষা করে দেখতে চান এবং ফলাফলের উপর নির্ভর করে একটি নির্দিষ্ট ক্রিয়া সম্পাদন করতে চান।

একটি if স্টেটমেন্টে টেস্ট কমান্ড হিসাবে শান্ত মোডে grep ব্যবহারের উদাহরণ এখানে রয়েছে:

if grep -q PATTERN filename then echo pattern found else echo pattern not found fi

বেসিক নিয়মিত এক্সপ্রেশন

জিএনইউ গ্রেপের দুটি নিয়মিত এক্সপ্রেশন বৈশিষ্ট্য সেট রয়েছে, বেসিক এবং এক্সটেন্ডেড। ডিফল্টরূপে, grep প্যাটার্নটিকে একটি বেসিক নিয়মিত অভিব্যক্তি হিসাবে ব্যাখ্যা করে।

যখন বেসিক নিয়মিত এক্সপ্রেশন মোডে ব্যবহৃত হয়, তখন মেটা-অক্ষরগুলি বাদে অন্য সমস্ত অক্ষর আসলে নিয়মিত প্রকাশ হয় যা নিজের সাথে মেলে। নীচে সর্বাধিক ব্যবহৃত মেটা-অক্ষরের তালিকা রয়েছে:

  • একটি লাইনের শুরুতে অভিব্যক্তি মেলে match (ক্যারেট) চিহ্নটি ব্যবহার করুন। নিম্নলিখিত উদাহরণে, স্ট্রিং ^kangaroo কেবল তখনই মিলবে যদি এটি কোনও লাইনের একেবারে শুরুতে ঘটে occurs

    grep "^kangaroo" file.txt

    একটি রেখার শেষে অভিব্যক্তি মেলে $ (ডলার) চিহ্নটি ব্যবহার করুন। নিম্নলিখিত উদাহরণে, স্ট্রিং kangaroo$ match কেবল তখনই মিলবে যদি এটি কোনও লাইনের একেবারে শেষে ঘটে।

    grep "kangaroo$" file.txt

    ব্যবহার করুন . (পিরিয়ড) প্রতীক কোনও একক অক্ষরের সাথে মেলে। উদাহরণস্বরূপ, kan দিয়ে শুরু হওয়া যে kan সাথে দুটি অক্ষর রয়েছে এবং তার সাথে স্ট্রিং roo দিয়ে শেষ হবে, আপনি নিম্নলিখিত প্যাটার্নটি ব্যবহার করতে পারেন:

    grep "kan..roo" file.txt

    ব্যবহার (বন্ধনী) বন্ধনীতে আবদ্ধ কোনও একক অক্ষরের সাথে মেলে। উদাহরণস্বরূপ, accept বা " accent " যুক্ত লাইনগুলি সন্ধান করুন, আপনি নিম্নলিখিত প্যাটার্নটি ব্যবহার করতে পারেন:

    grep "accet" file.txt

    ব্যবহার (বন্ধনী) বন্ধনীতে আবদ্ধ কোনও একক অক্ষরের সাথে মেলে। নিম্নলিখিত প্যাটার্নটি co(any_letter_except_l)a , যেমন coca , cobalt এবং এর মতো স্ট্রিংগুলির কোনও সংমিশ্রণের সাথে co(any_letter_except_l)a লাইনের সাথে মেলে না, grep "coa" file.txt

পরবর্তী অক্ষরের বিশেষ অর্থ থেকে বাঁচতে \ (ব্যাকস্ল্যাশ) প্রতীকটি ব্যবহার করুন।

বর্ধিত নিয়মিত অভিব্যক্তি

বর্ধিত নিয়মিত এক্সপ্রেশন হিসাবে প্যাটার্নটি ব্যাখ্যা করতে, -E (বা - --extended-regexp ) বিকল্পটি ব্যবহার করুন। প্রসারিত নিয়মিত এক্সপ্রেশনগুলিতে আরও জটিল এবং শক্তিশালী অনুসন্ধান নিদর্শন তৈরি করতে অতিরিক্ত মেটা-অক্ষরগুলির সাথে বুনিয়াদি সমস্ত মেটা-অক্ষর অন্তর্ভুক্ত। নীচে কয়েকটি উদাহরণ দেওয়া হল:

  • একটি প্রদত্ত ফাইল থেকে সমস্ত ইমেল ঠিকানা মিল এবং বের করুন:

    grep -E -o "\b+@+\.{2, 6}\b" file.txt

    একটি প্রদত্ত ফাইল থেকে সমস্ত বৈধ আইপি ঠিকানাগুলি মিল এবং সরিয়ে নিন:

    grep -E -o '(25|2|??)\.(25|2|??)\.(25|2|??)\.(25|2|??)' file.txt

-o বিকল্পটি কেবল মেলানো স্ট্রিং মুদ্রণের জন্য ব্যবহৃত হয়।

ম্যাচের আগে লাইনগুলি মুদ্রণ করুন

মিলের লাইনের আগে নির্দিষ্ট সংখ্যক লাইনের মুদ্রণ করতে -B (বা - --before-context ) বিকল্পটি ব্যবহার করুন।

উদাহরণস্বরূপ, মিলের লাইনের আগে পাঁচটি শীর্ষস্থানীয় প্রসঙ্গটি প্রদর্শন করতে, আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করবেন:

grep -B 5 root /etc/passwd

একটি ম্যাচের পরে লাইনগুলি মুদ্রণ করুন

মিলের লাইনের পরে নির্দিষ্ট সংখ্যক লাইনের মুদ্রণ করতে, -A (বা -A after --after-context ) বিকল্পটি ব্যবহার করুন।

উদাহরণস্বরূপ লাইনের সাথে মিলে যাওয়ার পরে চলার প্রসঙ্গে পাঁচটি লাইন প্রদর্শন করতে, আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করবেন:

grep -A 5 root /etc/passwd

উপসংহার

grep কমান্ড আপনাকে ফাইলের অভ্যন্তরের grep অনুসন্ধান করতে দেয় allows যদি কোনও মিল পাওয়া যায়, গ্রেপ নির্দিষ্ট প্যাটার্নযুক্ত লাইনগুলি মুদ্রণ করবে।

গ্রেপ সম্পর্কে গ্রেপ ব্যবহারকারীর ম্যানুয়াল পৃষ্ঠাতে আরও অনেক কিছু জানতে হবে।

গ্রেপ টার্মিনাল