আমি grep
একটি স্ট্রিংয়ের জন্য চাই , তবে পূর্ববর্তী পাঁচটি লাইন এবং নীচের পাঁচটি লাইন পাশাপাশি ম্যাচযুক্ত রেখাটিও দেখাব। আমি কীভাবে এটি করতে সক্ষম হব?
man grep | grep -C 1 context
:)
man grep | grep -C 1 "\-C"
;)
আমি grep
একটি স্ট্রিংয়ের জন্য চাই , তবে পূর্ববর্তী পাঁচটি লাইন এবং নীচের পাঁচটি লাইন পাশাপাশি ম্যাচযুক্ত রেখাটিও দেখাব। আমি কীভাবে এটি করতে সক্ষম হব?
man grep | grep -C 1 context
:)
man grep | grep -C 1 "\-C"
;)
উত্তর:
জন্য বাসদ বা গনুহ grep
আপনি ব্যবহার করতে পারেন -B num
ম্যাচের আগে এবং কতগুলি লাইন সেট করতে -A num
খেলা শেষে লাইন সংখ্যার জন্য।
grep -B 3 -A 2 foo README.txt
আপনি যদি ব্যবহার করতে পারেন তার আগে এবং পরে একই সংখ্যক লাইন চান -C num
।
grep -C 3 foo README.txt
এটি 3 লাইন আগে এবং পরে 3 লাইন প্রদর্শন করবে।
-A
এবং ( প্রসঙ্গের রেখার জন্য), বা ঠিক ( প্রসঙ্গের রেখার জন্য ... যতক্ষণ n 1 থেকে 9 হয়) -B
কাজ করবে work-C n
n
-n
n
-n
ফর্ম্যাটটি চেষ্টা করে দেখেছি এটি কেবলমাত্র কাজ করে 9
। 15
এটির জন্য 5 লাইন ফিরে আসে
-A
, -B
বা -C
)। সাধারণত, বিকল্প নির্দিষ্টকরণকারকের একটি মান অনুসরণ করা হয় ( -o a.out
জিসিসিতে আউটপুট ফাইল নির্দিষ্ট করতে) তবে এটি সাধারণ স্যুইচ / পতাকা হিসাবেও কাজ করতে পারে ( -g
জিসিসিতে ডিবাগিং তথ্য সক্ষম করতে)। তবে বিকল্পগুলির মধ্যে শূন্যস্থানগুলি alচ্ছিক, সুতরাং কোনও মান ছাড়াই বিকল্পগুলির জন্য, তাদের ( -ABC
) সংহত করা সম্ভব , যার অর্থ -15
ব্যাখ্যা করা হয় -1 -5
(দুটি পৃথক বিকল্প) এবং -5
ওভাররাইডগুলি -1
।
ack গ্রেপ হিসাবে অনুরূপ আর্গুমেন্ট সঙ্গে কাজ করে, এবং গ্রহণ করে -C
। তবে কোডের মাধ্যমে অনুসন্ধানের জন্য এটি সাধারণত ভাল।
grep
, এটি "বিজ্ঞাপন" ack
(যা একটি দুর্দান্ত সরঞ্জাম, প্রকৃতপক্ষে) ব্যবহার করা নিশ্চিত নয় এটি একটি ভাল ধারণা ...
grep astring myfile -A 5 -B 5
এটি "অস্ট্রিং" এর জন্য "মাইফাইল" গ্রেপ করবে এবং প্রতিটি ম্যাচের আগে এবং পরে 5 টি লাইন প্রদর্শন করবে
আমি সাধারণত ব্যবহার করি
grep searchstring file -C n # n for number of lines of context up and down
গ্রেপের মতো অনেক সরঞ্জামের মধ্যেও দুর্দান্ত মানুষ ফাইল রয়েছে। আমি নিজেকে গ্রেপ এর ম্যান পেজটি অনেক উল্লেখ করছি কারণ আপনি এটির সাথে অনেক কিছু করতে পারেন।
man grep
অনেক জিএনইউ সরঞ্জামগুলিতে একটি তথ্য পৃষ্ঠা থাকে যা ম্যান পৃষ্ঠা ছাড়াও আরও দরকারী তথ্য থাকতে পারে।
info grep
গ্রেপ ব্যবহার করুন
$ 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
"/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;
ripgrep
আপনি যদি পারফরম্যান্সের বিষয়ে চিন্তা করেন তবে ব্যবহার করুন ripgrep
যার অনুরূপ সিনট্যাক্স রয়েছে grep
, যেমন
rg -C5 "pattern" .
-C
,--context NUM
- প্রতিটি ম্যাচের আগে এবং পরে NUM টি লাইন দেখান।
এখানে -A
/ --after-context
এবং -B
/ এর মতো পরামিতি রয়েছে --before-context
।
টুলটি রাস্টের রেজেক্স ইঞ্জিনের উপরে নির্মিত যা এটি বড় ডেটাতে খুব দক্ষ করে তোলে ।
এখানে @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
প্যারামিটার।
আপনি যদি প্রায়শই কোড অনুসন্ধান করেন তবে এজি রূপালী অনুসন্ধানকারী গ্রেপের চেয়ে অনেক বেশি দক্ষ (অর্থাত্ দ্রুত) is
আপনি -C বিকল্পটি ব্যবহার করে প্রসঙ্গের লাইনগুলি দেখান।
উদাহরণ:
ag -C 3 "foo" myFile
line 1
line 2
line 3
line that has "foo"
line 5
line 6
line 7