একটি ম্যাচের চারপাশের অক্ষরগুলি গ্রেপ করুন


8

আমি একটি বিশাল ডাটাবেস ডাম্পের মধ্যে সন্ধান এবং প্রতিস্থাপনের সন্ধান করছি এবং এটি আমার মনে হয় যা ঘটবে তা করছে না। আমি ফাইলটিতে আমার টার্গেটের স্ট্রিংয়ের জন্য গ্রেপ করতে চাই এবং তারপরে আশেপাশের ৮ টি অক্ষর বা তার বেশি দেখতে পাচ্ছি (তার উপর নির্ভর করে আমার এই সংখ্যাটি সামঞ্জস্য করতে হতে পারে)। আমি এটা কিভাবে করবো?

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

এছাড়াও, একই লাইনে একাধিক ম্যাচ হতে পারে!


এটি কোনও পাঠ্য ফাইল নয়?
enzotib

এটি, তবে এমনকি ম্যাচগুলি চোখের বলের জন্য খুব বড় ফাইল।
ব্যবহারকারী 394

উত্তর:


12

অপরিশোধিত পদ্ধতি ব্যবহার grepকরার মতো কিছু হবে

grep -o "....yourtext...." /path/to/the/dump.sql

গ্রেট করা পাঠ্যের আগে / পরে বিন্দুর সংখ্যা অক্ষরের সংখ্যার সাথে মিলে যায়। -oবিকল্প তোলে grepআউটপুট শুধুমাত্র ম্যাচ, না পুরো লাইন।

uniqআউটপুট ব্যবহার করতে , মনে রাখবেন আপনাকে প্রথমে আউটপুটটি বাছাই করতে হবে। সুতরাং সাধারণত, আপনি করতে চাই

grep . . . | sort | uniq

আপনি যদি প্রতিটি ম্যাচের হিটকাউন্টে আগ্রহী হন তবে আপনি ব্যবহার করে চমৎকার আউটপুট পেতে পারেন

grep . . . | sort | uniq -c | sort -n

অভদ্র? একেবারে পরিশীলিত!
ব্যবহারকারী 394

1
আপনি পুনরাবৃত্তি অপারেটর ব্যবহার করে এই একটি সামান্য প্রসারিত করতে পারে: grep -o '.\{8\}yourtext.\{8\}'। এটি 8 টি বিন্দু গণনা করার চেয়ে কিছুটা কম ডিজেজিং।
কালেব

:) অশোধিত দ্বারা আমি বলতে চাইছি আপনি মিলিত অক্ষর গণনা (রেঞ্জগুলি ব্যবহার করে) বা চরিত্রের সেটগুলি সংকীর্ণ করার মতো জিনিসগুলি দিয়ে খেলেন না।
rozcietrzewiacz

@ কালেব এবং ব্যবহারকারী 394: এটি ঠিক আমি প্রস্তাব না করার ইচ্ছা করেছিলাম (এবং এভাবে আমার পদ্ধতিটিকে "অশোধিত" বলা হয়)। কারও কাছে পুনরাবৃত্তি অপারেটর নির্মাণের কথা মনে রাখা দরকার না - এছাড়াও "....." টাইপ করা এমনকি "is is 6 \}" টাইপ করা আরও দ্রুত।
rozcietrzewiacz

7

@Rozcietrzewiacz এর উত্তর থেকে শুরু করে আমি প্রসারিত করতে পারি

pattern="string"
num=8
grep -on ".\{0,$num\}$pattern.\{0,$num\}" input-file

1
"অপরিশোধিত" বিন্দু ক্রমটি সব সময় আরও ভাল এবং আরও ভাল
কালেব

1
@ কালেব: সাধারণত "অপরিশোধিত" উত্তরটি একটি ভাল শুরু, তবে কখনও কখনও কেউ এ সম্পর্কে কিছুটা ব্যাখ্যা করতে চান।
এনজোটিব

1
ডট সিকোয়েন্স পদ্ধতিটি বাম বা ডান ন্যায়সঙ্গত টার্গেটের নিদর্শনগুলি খুঁজে পাবে না; এই পদ্ধতি হবে। (+1)
পিটার.ও

2
পিএস .. আমি কেবল লক্ষ্য করেছি যে এটি একই লাইনে প্যাটার্নের বহুগুণ উদাহরণগুলি ধরবে না (যেমন ওপি উল্লিখিত হয়েছে) যখন প্রথম প্যাটার্নটির 'এক্সটা' পাঠ্যের সুযোগটি অগ্রণী 'অতিরিক্ত' পাঠ্যের সুযোগকে ছাড়িয়ে যায় পরবর্তী প্যাটার্নটির
পিটার.ও

@ ফ্রেড: হ্যাঁ, -oকেবল প্রথম ম্যাচটি দেয় যখন দুটি ম্যাচ ওভারল্যাপ হয়:echo 'aaabbbccc' | grep -o 'bb
এনজোটিব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.