গ্র্যাশের ফলাফলের আগে বা পরে লাইনগুলি কীভাবে আনব?


151

হাই আমি বাশ প্রোগ্রামিংয়ে খুব নতুন। আমি একটি প্রদত্ত পাঠ্যে সন্ধান করার জন্য একটি উপায় চাই। তার জন্য আমি grepফাংশনটি ব্যবহার করি :

grep -i "my_regex"

ওই কাজগুলো. তবে এই dataমত দেওয়া হয়েছে :

This is the test data
This is the error data as follows
. . . 
. . . .
. . . . . . 
. . . . . . . . .
Error data ends

একবার আমি শব্দটি errorব্যবহার করে (ব্যবহার করে grep -i error data) পেয়েছি , আমি শব্দটি অনুসরণ করে 10 টি রেখা খুঁজে পেতে চাই error। সুতরাং আমার আউটপুটটি হওয়া উচিত:

    . . . 
    . . . .
    . . . . . . 
    . . . . . . . . .
    Error data ends

এটি করার কোনও উপায় আছে?


আপনার বিবরণ থেকে মনে হয় আপনি 10 লাইনটি শব্দটি এগিয়ে নিয়ে যেতে চান error
টমাসডাব্লু

উত্তর:


266

ম্যাচের আগে এবং পরে লাইনগুলি মুদ্রণ করতে -Bএবং ব্যবহার করতে পারেন -A

grep -i -B 10 'error' data

ম্যাচের আগে 10 টি লাইন মুদ্রণ করবে, ম্যাচিং লাইনটি নিজেই।


1
ধন্যবাদ এটি কাজ করছে। তবে যখন আমি এই এক্সিকিউশনটিটিকে এইর মতো ভেরিয়েবলে সঞ্চয় করার চেষ্টা করেছি test=$(grep -i -B 10 'error' data)এবং এটি ব্যবহার করে মুদ্রণ করি echo $test, তখন আমি আউটপুট হিসাবে সোজা দীর্ঘ লাইন পাই।
শ্রীরাম

1
ধন্যবাদ আমি মূর্ত আউট আমি ভালো করতে প্রয়োজন echo "$test"বদলেecho $test
শ্রীরাম

25
-C 10এর আগে 10 টি লাইন মুদ্রণ করবে এবং পরে একটি পড়ে যাবে!
জোশুয়া পিন্টার

বিন্দু আগে একটি নির্দিষ্ট ব্যবহার করে এটি করার কোন উপায় আছে? বলুন যে দৈর্ঘ্য আমার আগে ধরতে হবে তা পরিবর্তনশীল?
এরুদাকি

31

এটি মিলের লাইনের পরে 10 টি রেখার প্রসঙ্গ প্রিন্ট করে

grep -i "my_regex" -A 10

মিলে যাওয়া লাইনের আগে যদি আপনাকে 10 টি শীর্ষস্থানীয় প্রসঙ্গে মুদ্রণ করতে হয়,

grep -i "my_regex" -B 10

এবং যদি আপনাকে নেতৃস্থানীয় এবং অনুগামী আউটপুট প্রসঙ্গের 10 টি লাইন মুদ্রণ করতে হয়

grep -i "my_regex" -C 10

উদাহরণ

user@box:~$ cat out 
line 1
line 2
line 3
line 4
line 5 my_regex
line 6
line 7
line 8
line 9
user@box:~$

সাধারণ গ্রেপ

user@box:~$ grep my_regex out 
line 5 my_regex
user@box:~$ 

নির্ভুল মিলের রেখা এবং 2 টি লাইন পরে গ্রেপ করুন

user@box:~$ grep -A 2 my_regex out   
line 5 my_regex
line 6
line 7
user@box:~$ 

নির্ভুল মিলের রেখা এবং 2 টি লাইন আগে গ্রেপ করুন

user@box:~$ grep -B 2 my_regex out  
line 3
line 4
line 5 my_regex
user@box:~$ 

নির্ভুল মিলের রেখা এবং 2 টি লাইন আগে এবং পরে গ্রেপ করুন Gre

user@box:~$ grep -C 2 my_regex out  
line 3
line 4
line 5 my_regex
line 6
line 7
user@box:~$ 

তথ্যসূত্র: ম্যানপেজ গ্রেপ

-A num
--after-context=num

    Print num lines of trailing context after matching lines.
-B num
--before-context=num

    Print num lines of leading context before matching lines.
-C num
-num
--context=num

    Print num lines of leading and trailing output context.

3
ভাল, ive এখন এই কয়েক বার এটি চেহারা ছিল, সম্ভবত আমি এটি এটি হিসাবে মনে করতে পারেন -A (FTER) -বি (পূর্বে) -সি (অন্টেক্সট)
খোলা


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