হোয়াইট স্পেসগুলি না করে আমি কীভাবে গ্রেপ করব?


17

আমি একটি বৃহত কোডবেস ধরে আছি এবং শীর্ষস্থানীয় সাদা স্থান এবং সারণীটি বেশ বিরক্তিকর বলে মনে হচ্ছে। এ থেকে মুক্তি পাওয়ার কোনও উপায় আছে কি?

grep -R "something" ./

উদাহরণস্বরূপ, এর পরিবর্তে:

foo/bar.cpp:                       qwertyuiosomethingoi
foo/bar/baz.h:                          43rfsgsomethingdrfg
bar/bar.cpp:            1234edwssomethingczd

আমি এর মতো কিছু পেতে চাই:

foo/bar.cpp: qwertyuiosomethingoi
foo/bar/baz.h: 43rfsgdsomethingrfg
bar/bar.cpp: 1234edwssomethingczd

বা আরও ভাল:

foo/bar.cpp:   qwertyuisomethingooi
foo/bar/baz.h: 43rfsgdrsomethingfg
bar/bar.cpp:   1234edwssomethingczd

এ থেকে মুক্তি পাও কোথায়? আউটপুট? অনুসন্ধানের ধরণে?
— Ignacio Vazquez-Abram

আউটপুটে @ ইগনাসিও আপডেট হওয়া প্রশ্ন
— অ্যান্ড্রু

উত্তর:


4

পরীক্ষার ফাইল তৈরি করুন

echo -e "\t   foo-somethingfoo" >something.foo
echo "    bar-bar-somethingbar" >something.bar_bar
echo "baz-baz-baz-somethingbaz" >something.baz_baz_baz
echo "  spaces    something  s" >something.spaces

সম্পূর্ণ গৌরবময় রঙ উত্পাদন :)

grep --colour=always "something" something.* | 
 sed -re  's/^([^:]+):(\x1b\[m\x1b\[K)[[:space:]]*(.*)/\1\x01\2\3/' |
   column -s $'\x01' -t

আউটপুট (রঙ পেতে এটি চালান)।

something.bar_bar      bar-bar-somethingbar
something.baz_baz_baz  baz-baz-baz-somethingbaz
something.foo          foo-somethingfoo
something.spaces       spaces    something  s

পরীক্ষিত gnome-terminal, konsole, terminator,xterm


ভাল কাজ! কিছুটা সমস্যা, তবে আপনি \tঅক্ষরগুলি মেলে ভুলে
— অ্যান্ড্রু

\t? ... এটি \tকোনও পৃথকের জন্য ব্যবহার করছে না , এটি $ '\ x01' (হেক্স 01) ব্যবহার করছে ... বা আপনার অর্থ অন্য কিছু?
— পিটার.ও

আমি বোঝাতে চাইছি শীর্ষস্থানীয় ট্যাবুলেশনের \tপাশাপাশি শীর্ষস্থানীয় হোয়াইটস্পেসগুলিও থাকতে পারে\s
— অ্যান্ড্রু

... স্থির। `` এ পরিবর্তন করা হয়েছে [[:space:]]... আপনি যদি কেবল ট্যাব এবং স্পেস বিবেচনা করতে চান এবং সমস্ত সাদা জায়গা নয়, পরিবর্তে এটি ব্যবহার করুন:[ \t]
— পিটার.ও

6

আপনি কেবল এগুলি ব্যবহার করে নির্মূল করতে পারেন sed

grep blah filename.foo | sed -e 's/^[ \t]*//'

এটি আউটপুট থেকে নেতৃস্থানীয় হোয়াইটস্পেসগুলি সরিয়ে ফেলবে


1
আউটপুটে কোনও লাইনের শুরুতে কোনও ফাঁকা স্থান নেই বলে এটি কোনও প্রভাব ফেলবে না।
— অভিষেক এ

6

ধরে নিই যে আপনি reএকটি ফাইলে প্যাটার্ন (একটি প্রাথমিক নিয়মিত প্রকাশ) খুঁজছেন , এবং আপনি সমস্ত মিলে যাওয়া লাইন থেকে শীর্ষস্থানীয় হোয়াইটস্পেসটি ছাঁটাই করতে চাই:

sed -n -e 's/^[[:blank:]]*//' -e '/re/p' thefile.c

(প্রকৃতপক্ষে, এটি প্রথমে সমস্ত নেতৃস্থানীয় হোয়াইটস্পেসগুলি বাদ দেয় এবং তারপরে প্যাটার্নটি সন্ধান করে তবে ফলাফলটি একই)

grepপরিবর্তে আউটপুট পোস্ট-প্রক্রিয়া করতে (আপনার সম্পাদিত প্রশ্নে):

grep re * | sed 's/:[[:blank:]]*/: /'

প্যাটার্নটি [[:blank:]]*শূন্য বা আরও বেশি স্পেস বা ট্যাবগুলির সাথে মেলে।


ধন্যবাদ, শেষ স্নিপেটটি ভাল কাজ করে। আউটপুট রঙ সংরক্ষণ করার কোনও উপায় আছে?
— অ্যান্ড্রু

রঙ? আমাকে পুরানো ফ্যাশন বলুন, তবে আমার টার্মিনালটি কঠোরভাবে কালো এবং কমলা ... (এটি একটি "আমি জানি না")।
— কুসালানন্দ

3
গ্রেপ কলে সর্বদা - রঙ = ব্যবহার করুন (জিএনইউ গ্রেপ ধরে)। সিড কল ​​রঙগুলি সরাবে না, আউটপুট কোনও টার্মিনালে না গেলে এটি রঙ ব্যবহার করে না (--color = স্বয়ংক্রিয়র ডিফল্ট সহ)। "সর্বদা" এটিকে জোর করে, ভাল, সর্বদা রঙ ব্যবহার করে।
— জারজেন এ। এয়ারহার্ড

@ জারজেন, আপনাকে ধন্যবাদ, তবে --color=alwaysএই রিজেপ্সে কাজ করে না: /
— অ্যান্ড্রু

1
ওহ শাকস, আপনি ঠিক বলেছেন। কারণ কোলন এবং হোয়াইটস্পেসের মধ্যে নিয়ন্ত্রণের সিকোয়েন্স রয়েছে (রঙের জন্য)। আপনি এসড কলটিতে এস্কেপ সিকোয়েন্সগুলি রাখতে পারেন (ক্রমটি কমপক্ষে একটি বগ-স্ট্যান্ডার্ড ভিটি ১০০ এমুলেশন (এক্সটার্ম, স্ক্রিন ইত্যাদির জন্য) "" \ 033 [এম \ 033 [কে "। আমি মনে করি। ডি
— জার্গেন এ । এরহার্ড

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