গ্রেপ, সতর্কতা উপেক্ষা করুন


50

আমি একটি নির্দিষ্ট প্যাকেজের ইনস্টলেশন ডিরেক্টরিটি অনুসন্ধান করার চেষ্টা করছি। আমার একটি নির্দিষ্ট কীওয়ার্ড রয়েছে যা ব্যবহার করে আমি একটি নির্দিষ্ট ফাইল সন্ধান করার চেষ্টা করছি।

গ্রেপ চলাকালীন, আমি কেবল সিপিপি বা এইচ ফাইলের প্রকারটি অন্তর্ভুক্ত করতে চাই । অনুমতিটি অস্বীকার করা বা ডিরেক্টরিটি খুঁজে পাওয়া যায়নি এর মতো গ্রেপগুলি সতর্কতা প্রদর্শন করতে চাই না । আমি কেবল এটির সাথে মিলে যাওয়া ফাইলগুলি প্রদর্শন করতে চাই, অন্য কিছুই নয়। দয়া করে পরামর্শ দিন আমি এটি কীভাবে করতে পারি?

বর্তমানে আমি ব্যবহার করছি

grep "My term" -ir --exclude-dir="\.svn" --include=*.{cpp,h} ./

উত্তর:


56

stderrস্ট্যান্ডার্ড আউট ফাইল বর্ণনাকারীর বিপরীতে এই সতর্কতাগুলি স্ট্রিমের দিকে পরিচালিত হয় । আপনি 2>/dev/nullআপনার কমান্ডের শেষে যুক্ত করে স্টডার আউটপুটটি নিঃশব্দ করতে পারেন ।


find . 2>/dev/null | grep 404.htmlকমান্ডটি দেখতে কেমন হবে তা আরও সুনির্দিষ্টভাবে বলা যায়
csga5000

30

সতর্কতাগুলি ফিল্টার করার চেয়ে বেশি সরাসরি আপনি এগুলি যোগ করে অক্ষম করতে পারেন -s:

grep "My term" -sir --exclude-dir="\.svn" --include=*.{cpp,h} ./

এই বিকল্পটির সাথে সামঞ্জস্যের কিছু সমস্যা রয়েছে। তবে এটি ব্যক্তিগত ব্যবহারের জন্য সমস্যা হওয়া উচিত নয়।

-s, - কোনও বার্তা: অস্তিত্বহীন বা অপঠনযোগ্য ফাইল সম্পর্কে ত্রুটি বার্তাগুলি দমন করে। বহনযোগ্যতা দ্রষ্টব্য: GNU গ্রেপের বিপরীতে, 7 তম সংস্করণ ইউনিক্স গ্রেপ POSIX- এর সাথে সামঞ্জস্য করেনি, কারণ এটির -Q এর অভাব রয়েছে এবং এর -s বিকল্পটি GNU গ্রেপ-এর বিকল্পের মতো আচরণ করেছে। ইউএসজি-স্টাইলের গ্রেপেরও -কির অভাব ছিল তবে এর -s বিকল্পটি জিএনইউ গ্রেপের মতো আচরণ করেছে। পোর্টেবল শেল স্ক্রিপ্টগুলি -Q এবং -s উভয়ই এড়ানো উচিত এবং এর পরিবর্তে স্ট্যান্ডার্ড এবং ত্রুটি আউটপুটটিকে / dev / নালটিতে পুনর্নির্দেশ করা উচিত। (-পসিক্স দ্বারা নির্দিষ্ট করা আছে।)


আমি সবেমাত্র 13.04 ইনস্টল করেছি এবং আমি ত্রুটিগুলি পাচ্ছি যা আমি 12.04 দিয়ে পাইনি। এটা কি কিছু পরিবর্তন হতে পারে? আমি ভেবেছিলাম এটি দুর্দান্ত ছিল যে গ্রেপ ফাইলগুলির ডিরেক্টরি হওয়ার বিষয়ে সতর্কতা বন্ধ করবে কারণ বেশিরভাগ ক্ষেত্রে আমি কেবল যত্ন করি না!
অ্যালেক্সিস উইলক 12:33

দুঃখিত, আমি এখনও 12.10 এ আছি, সুতরাং আমি এটি নিশ্চিত করতে পারি না।
সেবাস্তিয়ান ভম মিয়ার

5

আমি এরকম এক টন বিরক্তিকর বার্তা পেয়েছিলাম:

grep: commands: Is a directory
grep: events: Is a directory
grep: views: Is a directory

কারণটি হ'ল --directoriesপতাকাটি ডিফল্ট হয়েছে read। আমি এটিকে পরিবর্তন করেছি recurse; আপনি যদি না চান তবে এটি স্বয়ংক্রিয়ভাবে একটি পুনরাবৃত্ত অনুসন্ধান করতে পারে যার skipপরিবর্তে আপনি ব্যবহার করতে পারেন ।

এটি সর্বদা হ্যান্ডেল করার সহজতম উপায় হ'ল এটি পরিবেশের পরিবর্তনশীলতে সেট করা। ইন ~/.bash_profileবা ~/.bashrcআপনার ডিস্ট্রো উপর ভিত্তি করে:

export GREP_OPTIONS='--directories=recurse'

আমি গ্রেপ ব্যবহার করার সময় এটি স্বয়ংক্রিয়ভাবে এই বার্তাগুলিকে দমন করে।

আর একটি বিকল্প হ'ল --no-messagesপতাকা, শর্টহ্যান্ড -s। এটি Is a directoryবার্তাগুলি থেকে মুক্তিও পাবে, তবে এটি অন্যান্য বার্তাগুলিকেও দমন করে যা আরও কার্যকর হতে পারে। উদাহরণস্বরূপ, আপনি যদি নেস্টেড অনুসন্ধান করছেন */*/*এবং সেই ধরণের কোনও ফাইল উপস্থিত নেই, এটি আপনাকে তা বলবে না।


ভাল ব্যাখ্যা
aldr

1

পরিবর্তে করছেন বিকল্প পদ্ধতিতে grepসঙ্গে যাও recursively -ir হবে যাক findকমান্ড (যা ডিফল্টভাবে রিকার্সিভ হয়) সঙ্গে অনুমতি হ্যান্ডেল -readableপতাকা এবং পাথ এর সঙ্গে বাদ দেওয়ার -not -path "*.svn*"পতাকা, এবং তারপর ফাইলে পাস grep। ডিরেক্টরিগুলি বাদ দিয়ে -type fকেবল নিয়মিত ফাইলগুলি সন্ধানের জন্য করা হয়।

$ find . -not -path "*.svn*" -type f -name "*.cpp" -or -name "*.h"  -readable -exec grep "my terms" "{}" \; 

0

নির্দিষ্ট ফাইলগুলিতে পুনরাবৃত্ত অনুসন্ধানগুলি করার সময়, আপনি ব্যবহার করা থেকে অনেক ভাল ack-grep। এখানে সিনট্যাক্সটি হ'ল:

ack-grep -i "My term" --cpp --h

অনুমতি ত্রুটি বার্তাগুলি মুছে ফেলার জন্য আপনি একই কমান্ডটি চালাতে চাইতে পারেন sudo:

ack-grep -i "My term" --cpp --h

তবে শেষ পর্যন্ত, আপনি যদি ইনস্টলড প্যাকেজগুলি অনুসন্ধান করতে চান, তবে এই বিভিন্ন বিকল্পগুলি দেখুন: https://www.google.com/search?q=ubuntu%20search%20inside%20installed%20packages

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