একটি নিয়মিত প্রকাশ হিসাবে গ্রেপ না


96

আমার পিএইচপি ভেরিয়েবল সন্ধান করতে হবে $someVar। তবে গ্রেপ মনে করে যে আমি একটি রেইজেক্স চালানোর চেষ্টা করছি এবং অভিযোগ করছি:

$ grep -ir "Something Here" * | grep $someVar
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.
$ grep -ir "Something Here" * | grep "$someVar"
<<Here it returns all rows with "someVar", not only those with "$someVar">>

আমি গ্রেপকে বলার জন্য একটি বিকল্পটি দেখতে পাচ্ছি না স্ট্রিংটিকে একটি রেজেক্স হিসাবে ব্যাখ্যা না করে $কেবল অন্য স্ট্রিং চরিত্র হিসাবে অন্তর্ভুক্ত করতে ।


4
এই প্রশ্নে, মূল ইস্যুটি রেজেক্স হিসাবে grepব্যাখ্যা করার $মতো নয় । এটি $someVarপরিবেশের পরিবর্তনশীল someVar, সম্ভবত খালি স্ট্রিংয়ের মান সহ শেল প্রতিস্থাপন সম্পর্কে । দ্বিতীয় উদাহরণটি সমস্ত সারিগুলি someVarছাড়াও সমস্ত সারিগুলি ফিরিয়ে আনবে না, কারণ খালি স্ট্রিংটি সমস্ত লাইনে রয়েছে। শেলটি বিকল্প না হিসাবে বলতে, আপনাকে ব্যবহার করতে হবে '$someVar'বা \$someVar। তারপরে আপনাকে চরিত্রটির grepব্যাখ্যা নিয়ে কাজ করতে হবে $
ক্রিস্টোফ ড্রেভেট-ড্রাগুয়েট

4
@ ক্রিস্টোফ্রেডেভেট-ড্রাগুয়েট: ব্যাখ্যাটির জন্য আপনাকে ধন্যবাদ, ডাউন ডাউনকে নিয়ে আমি হতবাক হয়েছি! আপনার মন্তব্যটি উত্তর হওয়ার পক্ষে যথেষ্ট তথ্যবহুল, আসলে যদি তা হয় তবে এটি পৃষ্ঠায় আরও ভাল উত্তর হতে পারে।
দোটানকোহেন

উত্তর:



299

ব্যবহারের fgrep(থামানো হয়েছে), grep -Fবা grep --fixed-strings, এটি সংশোধন করা হয়েছে স্ট্রিং একটি তালিকা হিসাবে প্যাটার্ন আচরণ, একটি Regex পরিবর্তে করতে।

রেফারেন্সের জন্য, ডকুমেন্টেশনে উল্লেখ (অংশগুলি):

-F --fixed-stringsপ্যাটার্নটিকে নিউ লাইনের দ্বারা পৃথক করা স্থির স্ট্রিংগুলির (নিয়মিত প্রকাশের পরিবর্তে) তালিকা হিসাবে ব্যাখ্যা করুন, যার মধ্যে কোনওটি মিলে যেতে হবে। (-এফ POSIX দ্বারা নির্দিষ্ট করা হয়।)

fgrepহিসাবে একই grep -F। Fgrep হিসাবে সরাসরি প্রার্থনা হ্রাস করা হয়, তবে historicalতিহাসিক অ্যাপ্লিকেশনগুলি যা তাদের উপর নির্ভর করে না এমন সংশোধিত চালানোর অনুমতি দেয় provided

সম্পূর্ণ রেফারেন্সের জন্য, দেখুন: https://www.gnu.org/savannah-checkouts/gnu/grep/manual/grep.html


সহজ দুর্দান্ত উত্তর।
ব্রেডএমজে

সম্মত you're আপনি যখন ভেরিয়েবল ব্যবহার করছেন addslashes()আপনি এটিকে পিএইচপি এর মতো কিছু করতে পারবেন না । এটি করার সহজ উপায় এটি।
গেরলিংগুয়ে

4
আপনাকে ধন্যবাদ, এটি কাজ করেছে। অনুস্মারক: যদি ডাবল উদ্ধৃতি ব্যবহার করা হয় তবে আপনাকে এখনও এড়াতে হবে$ , উদাহরণস্বরূপ grep -FR "unset(\$foo['bar'])"
:,

57

grep -Fgrepআর্গুমেন্টটিকে একটি নির্দিষ্ট স্ট্রিং হিসাবে ব্যাখ্যা করতে বলার একটি স্ট্যান্ডার্ড উপায় , কোনও প্যাটার্ন নয়।


4
সিরিয়াসলি, এটি গ্রহণযোগ্য উত্তর হওয়া উচিত!
ankush981

চমৎকার উত্তর. যখন আমি ssh কমান্ড ব্যবহার করে with দিয়ে একটি স্ট্রিং অনুসন্ধান করি তখন এটি আমার সমস্যার সমাধান করে। "\" দিয়ে পালানো সেই দৃশ্যে কাজ করেনি। তবে -এফ পতাকা কৌশলটি করেছে।
রাজশেখর

8

আপনাকে গ্রেপকে বলতে হবে যে আপনি '-F' ব্যবহার করে কোনও প্যাটার্নের পরিবর্তে স্থির স্ট্রিং ব্যবহার করেন:

grep -ir "Something Here" * | grep -F \$somevar

3

এই প্রশ্নে, মূল ইস্যুটি রেজেক্স হিসাবে grepব্যাখ্যা করার $মতো নয় । এটি $someVarপরিবেশের ভেরিয়েবলের মান সহ শেল প্রতিস্থাপন সম্পর্কেsomeVar , সম্ভবত খালি স্ট্রিংয়ের ।

সুতরাং প্রথম উদাহরণে, grepএটি কোনও যুক্তি ছাড়াই কল করার মতো , এবং সে কারণেই এটি আপনাকে usageআউটপুট দেয় । দ্বিতীয় উদাহরণটি someVarসমস্ত লাইন সমেত সমস্ত সারি ফিরিয়ে দেবে না , কারণ খালি স্ট্রিংটি সমস্ত লাইনে রয়েছে।

শেলটি বিকল্প না হিসাবে বলতে, আপনাকে ব্যবহার করতে হবে '$someVar'বা \$someVar। তারপরে আপনাকে $চরিত্রটির গ্রেপ ব্যাখ্যার সাথে মোকাবেলা করতে হবে , সুতরাংgrep -F অন্যান্য অনেক দেওয়া বিকল্পটি।

সুতরাং একটি বৈধ উত্তর হবে:

grep -ir "Something Here" * | grep '$someVar'

2

-Fবিকল্পের জন্য +1 , এটি গ্রহণযোগ্য উত্তর হবে। এছাড়াও, -I..আমার ফাইলগুলির প্যাটার্নটি অনুসন্ধান করার সময় আমার একটি "অদ্ভুত" আচরণ -Iছিল , কারণ এটিকে বিকল্প হিসাবে বিবেচনা করা হয়েছিল grep; এ জাতীয় ত্রুটি এড়াতে, আমরা স্পষ্ট করে কমান্ডের যুক্তিগুলির শেষে উল্লেখ করতে পারি --

উদাহরণ:

grep -HnrF -- <pattern> <files>

আশা করি যে কাউকে সাহায্য করবে।



Gnu.org/software/grep/manual/grep.html থেকে : " -এফ : প্যাটার্নটিকে নির্দিষ্ট রেখার তালিকা হিসাবে ব্যাখ্যা করুন (নিয়মিত এক্সপ্রেশনগুলির পরিবর্তে), নিউলাইন দ্বারা পৃথক করা, যার মধ্যে কোনওটি মিলবে
পসিক্স

যদি --ব্যবহার হয়, -HnrFবাদ দেওয়া যাবে?
ড্যানিয়েল

@ ড্যানিয়েল এটি আপনি যা করতে চান তার উপর নির্ভর করে: -Fনিয়মিত অভিব্যক্তি হিসাবে প্যাটার্নটি ব্যাখ্যা করা থেকে --বিরত থাকে , তবে গ্রেপের বিকল্প হিসাবে এটি অনুসরণকারী উপাদানগুলির ব্যাখ্যা করা এড়ানো হয়।
অলোকা গো

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