ড্যাশ / হাইফেন দিয়ে শুরু হওয়া স্ট্রিংয়ের জন্য আমি কীভাবে গ্রেপ করতে পারি?


347

আমি -Xকোনও ফাইলটিতে ড্যাশ / হাইফেনের মতো শুরু হওয়া স্ট্রিংটির জন্য গ্রেপ করতে চাই , তবে এটি একটি কমান্ড লাইন আর্গুমেন্ট হিসাবে বিভ্রান্ত করছে।

আমি চেষ্টা করেছিলাম:

grep "-X"
grep \-X
grep '-X'

উত্তর:


465

ব্যবহার করুন:

grep -- -X

সম্পর্কিত: খালি ডাবল ড্যাশ বলতে কী বোঝায়? ( নেটি সম্পর্কে বাদামকে ধন্যবাদ )


57
আমাদের মধ্যে যারা এই পর্যায়ে ভাবছেন তার --অর্থ কী বা কী : unix.stackexchange.com/questions/11376/…
বাদামি

2
দ্য সিলভার অনুসন্ধানকারী (এজি) এর সাথেও কাজ করে।
জেভ আইজেনবার্গ

আপনি যদি ভেরিয়েবল স্পেস সহ ব্যবহার করতে চান তবে আপনার এই জাতীয় কিছু ব্যবহার করা উচিত:ARGS="-a -b -c" grep -- "$ARGS"
zapstar

2
@ জাপস্টার বা ঠিক grep -- "--name awesome",।
ব্রেট উইদমিয়ার

@ ব্রিটউইডমিয়ার, হ্যাঁ, আমার পরিবর্তনশীলটি ব্যবহার করা উচিত হয়নি, এটি মানুষকে বিভ্রান্ত করে।
জপস্টার

57

ড্যাশটি বাশের একটি বিশেষ চরিত্র যা http://tldp.org/LDP/abs/html/special-chars.html#DASHREF এ উল্লিখিত হয়েছে । সুতরাং একবার এড়ানোর পরে আপনি বাশকে ছাড়িয়ে যান, তবে গ্রেপ এর ড্যাশগুলির নিজস্ব বিকল্প রয়েছে (বিকল্প সরবরাহ করে)।

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

grep \\-X
grep '\-X'
grep "\-X"

স্ক্রিপ্ট / প্রোগ্রামে বাশ কীভাবে আর্গুমেন্টগুলি পাস করে তা চেষ্টা করার একটি উপায় একটি .sh স্ক্রিপ্ট তৈরি করা যা সমস্ত আর্গুমেন্টকে কেবল প্রতিধ্বনিত করে। আমি সময়ে সময়ে খেলতে ইকোআরগস.এসএস নামে একটি স্ক্রিপ্ট ব্যবহার করি, এটিতে যা রয়েছে তা হ'ল:

echo $*

আমি এটি হিসাবে অনুরোধ:

bash echo-args.sh \-X
bash echo-args.sh \\-X
bash echo-args.sh "\-X"

আপনি ধারণা পেতে।


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

25

grep -e -X কৌতুক করবে


1
আমার গ্রেপ-এ নেই, খুব অদ্ভুত
মাইকে

14
হারের জন্য সোলারিস
মাইকে

2
/ ইউএসআর / এক্সপিজি 4 / বিন / গ্রেপ, বিটিডব্লিউ থেকে সোলারিতে পাওয়া যায়। এই ডিরেক্টরিতে প্রচুর আরও সম্পূর্ণ ইউটিলিটি।
pra

এটি MinGW এর অধীনে কাজ করেছে ( MinGW সমর্থন করে না -P(তবে এটি অন্য গল্প এবং এটি এখানে প্রয়োগ হয় না))।
পিটার মর্টেনসেন



7

সোলারিস মেশিনে আমার অ্যাক্সেস নেই, তবে grep "\-X"আমার জন্য লিনাক্সে কাজ করে।


5

ইতিমধ্যে উল্লিখিত হিসাবে আর্গুমেন্টগুলি প্রক্রিয়াকরণ বন্ধ করতে সঠিক উপায় হ'ল "-"। এটি সরঞ্জামের উত্সে getopt_long (getopt.h থেকে GNU সি-ফাংশন) ব্যবহারের কারণে is

এই কারণেই আপনি অন্যান্য কমান্ড-লাইন সরঞ্জামগুলিতে একই ঘটনা লক্ষ্য করেন; যেহেতু তাদের বেশিরভাগই জিএনইউ সরঞ্জাম এবং এই কলটি ব্যবহার করে, তারা একই আচরণ প্রদর্শন করে।

পার্শ্ব নোট হিসাবে - getopt_long হ'ল আমাদেরকে -rlo এবং --really_long_option এবং দোভাষীর মধ্যে যুক্তির সংমিশ্রনের মধ্যে দুর্দান্ত পছন্দ দেয়।


3

আপনি যদি এমন কোনও ইউটিলিটি ব্যবহার করছেন যা গ্রেপকে একক যুক্তি দিয়ে যায়, আপনি ব্যবহার করতে পারেন:

'[-]X'


-1
ls -l | grep "^-"

আশা করি এটি আপনার উদ্দেশ্যে কাজ করবে।


2
এই এক্সপ্রেশনটি ড্যাশ দিয়ে শুরু হওয়া কেবল রেখাগুলি ধরে catch এটি প্রাথমিক প্রশ্নের সাথে সম্মতি দেয় না। তিনি কোনও ড্যাশ দিয়ে শুরু করে স্ট্রিংটি অনুসন্ধান করতে চান তবে যে রেখাগুলিতে এই স্ট্রিংটি রয়েছে সেটি কোনও ড্যাশ দিয়ে শুরু করা দরকার ছিল না the প্রাথমিক প্রশ্নে ড্যাশ দিয়ে শুরু হওয়া স্ট্রিংটি লাইনটির যে কোনও জায়গায় হতে পারে।
লরেন্ট সাইমন

-1

গ্রেপ "^ -X" ফাইল

এটি গ্রেপ করে ফাইলটি তৈরি করে সমস্ত লাইন বেছে নেবে। p গ্রেপ "^" এ শুরু হওয়া একটি লাইন নির্দেশ করে


1
ইতিমধ্যে একটি উত্তর রয়েছে যা সুপারিশ করেছে যে স্ট্যাকওভারফ্লো.com/ a/ 27440348 / 441757 (এক বছরেরও বেশি আগে পোস্ট করা হয়েছে)
সিডোশোবার্কার

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