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


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.