GNU গ্রেপ আউটপুট একটি নির্বাচিত গ্রুপ করতে পারেন?


47

কোনও এক্সপ্রেশন থেকে মিলিত গোষ্ঠী পেতে জিএনইউ গ্রেপ ব্যবহার করা কি সম্ভব?

উদাহরণ:

echo "foo 'bar'" | grep -oE "'([^']+)'"

যা "'বার'" আউটপুট দেয়। তবে আমি আরও একবার "গ্রেপ" না পাঠিয়ে কেবল "বার" পেতে চাই (অর্থাত্ ম্যাচ করা গ্রুপটি পান)। এটা কি সম্ভব?

উত্তর:


50

আপনি sedএই জন্য ব্যবহার করতে পারেন । বিএসডি তে sed:

echo "foo 'bar'" | sed -E "s/.*'([^']+)'.*/\\1/"

বা, -Eবিকল্প ছাড়া :

sed "s/.*'\([^']\+\)'.*/\1/"

এটি মাল্টলাইন ইনপুটটির জন্য কাজ করে না। তার জন্য আপনার প্রয়োজন:

sed -n "s/.*'\([^']\+\)'.*/\1/p"

ধন্যবাদ, সেড সম্পর্কে ভুলে গিয়েছিলাম। তবে স্পষ্ট করার জন্য, সে যুক্তিটি গ্রহণ করবে না
E

এইচএম, এটি আমার মেশিনে রয়েছে (ম্যাক ওএস এক্স)। আরও পরীক্ষার পরে, ম্যান পেজে: "-E, -a এবং -i বিকল্পগুলি মানহীন ফ্রিবিএসডি এক্সটেনশান এবং অন্য অপারেটিং সিস্টেমে উপলভ্য নয়।"
jtbandes

1
- আমার কাছে এটি মনে হয়।
তোরান্দি

1
@ জেটব্যান্ডস: আপনার এই অভিব্যক্তিটির জন্য বর্ধিত বৈশিষ্ট্যগুলির প্রয়োজন নেই .. ( ) +ব্যবহারের জন্য আমার কেবল তিনটি পালানোর অক্ষর প্রয়োজন \( \) \+: এটি কার্যকরভাবে একই রকম:sed "s/.*'\([^']\+\)'.*/\1/"
পিটার.ও

2
এটি মাল্টলাইন ইনপুটটির জন্য কাজ করে না। তার জন্য আপনার প্রয়োজন: sed -n "s/.*'\([^']\+\)'.*/\1/p"
ফ্রেইকহেড

28

যদিও গ্রেপ একটি নির্দিষ্ট গোষ্ঠীটিকে আউটপুট দিতে পারে না, তবে আপনার পরবর্তীটি অর্জনের জন্য আপনি লুকে হেড এবং পিছনে দৃ use়তার সাথে ব্যবহার করতে পারেন:

echo "foo 'bar'" | grep -Po "(?<=')[^']+(?=')"


8
grep -Pসমস্ত প্ল্যাটফর্মে উপলব্ধ নয়। তবে যদি এটি হয় তবে লুকেহেড / পেছন ব্যবহার করা সমস্যা সমাধানের খুব সুন্দর উপায়।
সাবস্টিয়ান

1
চেহারার পিছনে থাকা দৃ ?়তার সাথে গ্রেপ কি বুদ্ধিমান? এটি দীর্ঘ চেহারা-পিছনের সাথে কীভাবে সম্পাদন করে? এটি কি রেগেক্সের বাকী অংশগুলির সাথে একরকম "প্রত্যয় গাছ" এর সাথে চেহারাগুলি একীভূত করছে ?
রস রোজার্স 18

3

আপনি \Kম্যাচ পাঠ্যটিতে যোগ করা হয়নি এমন বর্ণনাহুলির সাথে বাম হাতের মিলের পাঠ্যটি পুনরায় সেট করতে এবং বাতিল করতে ব্যবহার করতে পারেন :

$ echo "foo 'bar'" | grep -oP "'\K[^']+(?=')"
bar

শুধুমাত্র জিএনইউ গ্রেপ।

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