একটি ফাইল গ্রেপ, কিন্তু চারপাশের বিভিন্ন লাইন দেখান?


3414

আমি grepএকটি স্ট্রিংয়ের জন্য চাই , তবে পূর্ববর্তী পাঁচটি লাইন এবং নীচের পাঁচটি লাইন পাশাপাশি ম্যাচযুক্ত রেখাটিও দেখাব। আমি কীভাবে এটি করতে সক্ষম হব?


3
এই উদ্দেশ্যে আমি ব্রেন্ডন গ্রেগের পার্ল স্ক্রিপ্টের একটি অনুলিপি রাখছি । ভাল কাজ করে.
ইথান পোস্ট

6
সোলারিসে কাজ করে এমন কোনও সমাধানের জন্য, এই লিঙ্কটি দেখুন
jahroy

106
man grep | grep -C 1 context:)
StvnW

20
man grep | grep -C 1 "\-C";)
অ্যান্ডারস বি

9
@ স্টিভনডব্লু ... আমি জানি না যে এই মেটা (আরও সাধারণভাবে, এসও প্রসঙ্গে নয়) কল করতে হবে বা কী ডাকবে। উত্তরটি খুঁজতে উত্তরটি কীভাবে ব্যবহার করবেন তা দেখিয়ে আপনি প্রশ্নের উত্তর দিয়েছিলেন।
bবলldave025

উত্তর:


4531

জন্য বাসদ বা গনুহ grep আপনি ব্যবহার করতে পারেন -B numম্যাচের আগে এবং কতগুলি লাইন সেট করতে -A numখেলা শেষে লাইন সংখ্যার জন্য।

grep -B 3 -A 2 foo README.txt

আপনি যদি ব্যবহার করতে পারেন তার আগে এবং পরে একই সংখ্যক লাইন চান -C num

grep -C 3 foo README.txt

এটি 3 লাইন আগে এবং পরে 3 লাইন প্রদর্শন করবে।


56
এটি ভাল তবে দুর্ভাগ্যক্রমে সোলারিস গ্রেপ সেটিকে সমর্থন করে না। সোলারিসের
5

9
ঠিক আছে, তবে ম্যাচের পরে যদি সমস্ত লাইন আউটপুট প্রদর্শন করতে চান ? গ্রেপ -A0 এবং গ্রেপ -A-1 এটিকে কাটবেন না ...
g33kz0r

2
আমার ম্যান পৃষ্ঠাগুলিতে উল্লিখিত হলেও কোনও কারণে আমার পক্ষে কাজ করে না।
হ্যারি উউর কল্টুক

2
আপনি যদি এইচপি-ইউএক্স এনভিভি হন তবে গ্রেপ সংস্করণের কোনওটিই সোলারিসের মতো কাজ করবে না। সোলারিস লিঙ্কটি ব্যবহার করতে সক্ষম হয়েছিল কিন্তু সেই লিঙ্কটিতে অ্যাওকে দিয়ে নওকে প্রতিস্থাপন করুন।
zkarthik

6
-n লাইন সংখ্যার জন্য, তবে গ্রেপ এর কয়েকটি সংস্করণের জন্য -n # লাইন সংখ্যার সাথে # পার্শ্ববর্তী লাইনগুলি (যেমন-সি) দেখায়। এটি যখন আমার প্রসঙ্গে প্রযোজন দরকার তখন এটি আমার কাছে যেতে একটি দরকারী শর্টকাট।
অ্যান্টনি ডিসান্টি

607

-Aএবং ( প্রসঙ্গের রেখার জন্য), বা ঠিক ( প্রসঙ্গের রেখার জন্য ... যতক্ষণ n 1 থেকে 9 হয়) -Bকাজ করবে work-C nn-nn


আমি -nফর্ম্যাটটি চেষ্টা করে দেখেছি এটি কেবলমাত্র কাজ করে 915এটির জন্য 5 লাইন ফিরে আসে
দীপক মহাকালে

7
@ প্রদীপমহাকলে এটি সম্ভবত পসিক্স প্রোগ্রামগুলি দ্বারা কমান্ড-লাইন আর্গুমেন্ট / বিকল্পগুলি পার্স করার সাথে সম্পর্কিত। বিকল্প নির্দিষ্টকরণকারী একটি একক অক্ষর (যেমন -A, -Bবা -C)। সাধারণত, বিকল্প নির্দিষ্টকরণকারকের একটি মান অনুসরণ করা হয় ( -o a.outজিসিসিতে আউটপুট ফাইল নির্দিষ্ট করতে) তবে এটি সাধারণ স্যুইচ / পতাকা হিসাবেও কাজ করতে পারে ( -gজিসিসিতে ডিবাগিং তথ্য সক্ষম করতে)। তবে বিকল্পগুলির মধ্যে শূন্যস্থানগুলি alচ্ছিক, সুতরাং কোনও মান ছাড়াই বিকল্পগুলির জন্য, তাদের ( -ABC) সংহত করা সম্ভব , যার অর্থ -15ব্যাখ্যা করা হয় -1 -5(দুটি পৃথক বিকল্প) এবং -5ওভাররাইডগুলি -1
নাটিয়িক্স

1
-5 উভয়ের চেয়ে দ্রুত -A 5 -B 5 এগুলি একসাথে ব্যবহার করার উদ্দেশ্যে নয়। স্ক্রিপ্টের অন্যান্য পাঠকদের কাছে এটি ক্লিনার যদি আপনি -এ বা-বি বা-সি ওভার -9 চয়ন করেন।
এরিক আল্ডিংগার

76

ack গ্রেপ হিসাবে অনুরূপ আর্গুমেন্ট সঙ্গে কাজ করে, এবং গ্রহণ করে -C। তবে কোডের মাধ্যমে অনুসন্ধানের জন্য এটি সাধারণত ভাল।


5
ack -A -B সমর্থন করে।
শুভ

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

1
যদিও অনেকগুলি সিস্টেমে ডিফল্টরূপে ইনস্টল করার সুবিধা গ্র্যাপের রয়েছে।
মার্চ জেড

1
@ মার্কজেড: সত্য, গ্রেপের আক্কের চেয়ে ডিফল্টরূপে ইনস্টল হওয়ার সম্ভাবনা বেশি, তবে এসিসি একটি বহনযোগ্য, একা একা স্ক্রিপ্ট। এটি কোনও সংকলন বা সিস্টেম ডিরেক্টরিতে যেমন / usr / bin / এ ইনস্টল করার দরকার নেই। এটি একবার ডাউনলোড করে $ PATH (এবং এর এক্সটেকট অনুমতি বিট সেট) তালিকাভুক্ত ডিরেক্টরিতে স্থাপন করা হলে এটি এখনই কাজ করা উচিত। (এসকে কাজ করতে কোনও সুডো বা রুট সুবিধার দরকার নেই।)
জেএল

এই প্রশ্নটি সম্পর্কে grep, এটি "বিজ্ঞাপন" ack(যা একটি দুর্দান্ত সরঞ্জাম, প্রকৃতপক্ষে) ব্যবহার করা নিশ্চিত নয় এটি একটি ভাল ধারণা ...
MonsieurDart

39
grep astring myfile -A 5 -B 5

এটি "অস্ট্রিং" এর জন্য "মাইফাইল" গ্রেপ করবে এবং প্রতিটি ম্যাচের আগে এবং পরে 5 টি লাইন প্রদর্শন করবে


19
"গ্রেপ অ্যাস্ট্রিং মাইফাইল-সি 5" একই কাজ করবে
সৈয়দ সিরাজ উদ্দিন

20

আমি সাধারণত ব্যবহার করি

grep searchstring file -C n # n for number of lines of context up and down

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

man grep

অনেক জিএনইউ সরঞ্জামগুলিতে একটি তথ্য পৃষ্ঠা থাকে যা ম্যান পৃষ্ঠা ছাড়াও আরও দরকারী তথ্য থাকতে পারে।

info grep

13

গ্রেপ ব্যবহার করুন

$ grep --help | grep -i context
Context control:
  -B, --before-context=NUM  print NUM lines of leading context
  -A, --after-context=NUM   print NUM lines of trailing context
  -C, --context=NUM         print NUM lines of output context
  -NUM                      same as --context=NUM

আপনি কি গ্রহণযোগ্য উত্তর পড়েন নি? আপনি প্রায় 10 বছরের পুরানো প্রশ্নটিতে ইতিমধ্যে যা বলা হয়েছে তার পুনরাবৃত্তি করছেন ...
ইয়োকাই

7
ওহ আমি দুঃখিত ইয়োকাই তবে উত্তরটি পুনরুদ্ধার করার জন্য গ্রেপের সহায়তা বিভাগটি গ্রেপিংয়ের বিষয়ে আমি কিছু পড়ি না।
চিয়েল দশ ব্রিংকে

1
@ ইয়োকাই চিল টেন ব্রিনকি যা বলেছিলেন তা ছাড়া, গৃহীত উত্তরটি দীর্ঘ বিকল্পগুলির উল্লেখ করে না
ব্যবহারকারী ৩73৩৮৮70০

10

"/Some/file.txt" এর "17655" সন্ধান করুন (Awk ব্যবহার করে) এর আগে এবং পরে 10 লাইন প্রসঙ্গ দেখায়, আউটপুট পূর্বে একটি কোলন অনুসরণ করে by সোলারিসে এটি ব্যবহার করুন যখন 'গ্রেপ' "- [এসিবি]" বিকল্পগুলি সমর্থন করে না।

awk '

/17655/ {
        for (i = (b + 1) % 10; i != b; i = (i + 1) % 10) {
                print before[i]
        }
        print (NR ":" ($0))
        a = 10
}

a-- > 0 {
        print (NR ":" ($0))
}

{
        before[b] = (NR ":" ($0))
        b = (b + 1) % 10
}' /some/file.txt;

7

ripgrep

আপনি যদি পারফরম্যান্সের বিষয়ে চিন্তা করেন তবে ব্যবহার করুন ripgrepযার অনুরূপ সিনট্যাক্স রয়েছে grep, যেমন

rg -C5 "pattern" .

-C, --context NUM- প্রতিটি ম্যাচের আগে এবং পরে NUM টি লাইন দেখান।

এখানে -A/ --after-contextএবং -B/ এর মতো পরামিতি রয়েছে --before-context

টুলটি রাস্টের রেজেক্স ইঞ্জিনের উপরে নির্মিত যা এটি বড় ডেটাতে খুব দক্ষ করে তোলে ।


5

এখানে @Ygor সমাধান মধ্যেawk

awk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}' b=3 a=3 s="pattern" myfile

দ্রষ্টব্য: আগে এবং পরে লাইন সংখ্যার সাথে পরিবর্তনশীল aএবং প্রতিস্থাপন b

এটা সিস্টেম যা, grep এর সমর্থন করে না জন্য বিশেষ উপযোগী -A, -Bএবং -Cপ্যারামিটার।


4
$ grep thestring thefile -5

-5আপনি পায় 5উপরে এবং ম্যাচ 'thestring করি' লাইন সমতূল্য -C 5বা -A 5 -B 5


4

Grep নামক একটি বিকল্প থাকে Context Line Control, আপনি ব্যবহার করতে পারেন --contextকেবল এই যে,

| grep -C 5

অথবা

| grep -5

কৌতুক করা উচিত


1

আমি কমপ্যাক্ট উপায় করতে ব্যবহার করি

grep -5 string file

এর সমতুল্য

grep -A 5 -B 5 string file

0

আপনি যদি প্রায়শই কোড অনুসন্ধান করেন তবে এজি রূপালী অনুসন্ধানকারী গ্রেপের চেয়ে অনেক বেশি দক্ষ (অর্থাত্ দ্রুত) is

আপনি -C বিকল্পটি ব্যবহার করে প্রসঙ্গের লাইনগুলি দেখান।

উদাহরণ:

ag -C 3 "foo" myFile

line 1
line 2
line 3
line that has "foo"
line 5
line 6
line 7
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.