গ্রা্যাপে নতুন লাইনের জন্য একটি প্যাটার্ন কীভাবে দেওয়া যায়?


95

গ্রা্যাপে নতুন লাইনের জন্য একটি প্যাটার্ন কীভাবে দেওয়া যায়? শুরুতে নতুন লাইন, শেষে নতুন লাইন। নিয়মিত প্রকাশের উপায় নয়। Like n এর মতো কিছু।


6
আপনি কি চান তা পরিষ্কার নয়। new line at the beginningএকটি ফাঁকা লাইন এবং new line at endফাইলের প্রতিটি লাইনে প্রযোজ্য। আপনি একটি উদাহরণ পোস্ট করতে পারেন?
পিপি

4
আসলে আপনি কেবল ব্যবহার করতে পারেন $। এটি কিছুটা সীমাবদ্ধ, তবে সাধারণ ক্ষেত্রে ব্যবহারযোগ্য।
ক্রিজিসটফ জাবোসস্কি

4
gnu.org/software/grep/manual/grep.html#Usage আইটেমটি দেখুন 15.
জার্নো

উত্তর:


84

grep নিদর্শনগুলি পৃথক লাইনের বিপরীতে মিলছে তাই কোনও ইনপুটটিতে পাওয়া একটি নতুন লাইনের সাথে কোনও প্যাটার্ন মিলানোর কোনও উপায় নেই।

তবে আপনি খালি লাইন এটি পেতে পারেন:

grep '^$' file
grep '^[[:space:]]*$' file # include white spaces 

কমপক্ষে GNU গ্রেপের -z বিকল্প রয়েছে যা নাল অক্ষর দ্বারা গ্রেপ ব্রেক লাইন তৈরি করে। তবে, নতুন লাইনের সাথে মিলানোর জন্য line n পংক্তিতে এটি নিউলাইন বা support n সমর্থন করবে বলে মনে হয় না, বাগ রিপোর্ট দেখুন
জার্নো

4
@ জার্নো এটি -P পতাকা সহ নিদর্শনগুলিতে \ n সমর্থন করে
রুবিস্টালিয়ন

92

pcregrepনিয়মিত পরিবর্তে চেষ্টা করুন grep:

pcregrep -M "pattern1.*\n.*pattern2" filename

-Mবিকল্প এটা, একাধিক লাইন জুড়ে মেলে যাতে আপনি যেমন নতুন লাইন জন্য অনুসন্ধান করতে পারেন \n


22

আপনি এইভাবে ব্যবহার করতে পারেন ...

grep -P '^\s$' file
  • -Pপার্ল নিয়মিত এক্সপ্রেশন (POSIX- এ একটি এক্সটেনশন grep) জন্য ব্যবহৃত হয়।
  • \sসাদা স্থান অক্ষরের সাথে মেলে; যদি এটি অনুসরণ করে *, এটি একটি খালি লাইনের সাথেও মেলে।
  • ^লাইনের শুরুতে মেলে। $লাইনের শেষের সাথে মেলে।

4
-Pএকটি জিএনইউ এক্সটেনশন। পরিস্থিতি যখন এটির জন্য আহ্বান করে তখন আমি এটি ব্যবহারের জন্য ভাল (সাধারণত চেহারা / চেহারা), তবে পসিক্স গ্রেপ এটি দিয়ে কেবল ফাইলটি করতে পারে [[:space:]]
jordanm

4
এফডাব্লুআইডাব্লু, সোলারিস 'এবং বিএসডি'র গ্রেপ ম্যানাপেজগুলি (অন্যকে পরীক্ষা করে দেখেনি) উভয়েরই একটি অনুচ্ছেদ রয়েছে -P। জিএনইউ যাই হোক বেশ মানসম্পন্ন। :)
কে 3 --- আরএনসি

4
ম্যানুয়াল পৃষ্ঠা থেকে: [-P] এই বিকল্পটি ফ্রিবিএসডি-তে সমর্থিত নয়।
মারিওন আর্নে

ম্যাকওএসএক্সের জন্য কোনও [-পি] নেই: গ্রেপ [-abcdDEFGHhiiJLlmnOopqRSsUVvwxZ] [-A সংখ্যা] [-বি নাম্বার] [-সি [নাম্বার]] [-e প্যাটার্ন] [-ফ ফাইল] [- বাইনারি-ফাইলগুলি = মান] [- রঙ [= কখন]] [- রঙ [[কখন]]] [- কনটেক্সট [= সংখ্যা]] [--লাবেল] [- লাইন-বাফার] [--নুল] [প্যাটার্ন] [ফাইল। ..]
Niccolò

@ নিক্কোল- আপনি brew install grepজিএনইউ গ্রেপ পেতে চাইবেন , যা বিভিন্ন উপায়ে উন্নত। আপেল.স্ট্যাকেক্সেঞ্জাওয়েজ.কমিশনস
হার্ড্রিক

19

@ জার্নোকে ধন্যবাদ আমি -z বিকল্প সম্পর্কে জানি এবং আমি জানতে পেরেছিলাম যে -N বিকল্পের সাথে জিএনইউ গ্রেপ ব্যবহার করার সময় এর সাথে মিল \nপাওয়া সম্ভব । :)

উদাহরণ:

grep -zoP 'foo\n\K.*'<<<$'foo\nbar'

প্রিন্ট bar


4
দুর্দান্ত, নোট করুন যে আমি উত্তরে "@ জার্নো" সম্পর্কে বিজ্ঞপ্তি পাই না।
জার্নো

4
এটা অসাধারণ! ভাগ করে নেওয়ার জন্য আপনাকে অনেক ধন্যবাদ!
অ্যালিসিয়া তাং

6

যেমন কাজের মতো (অ-পোর্টেবল ব্যবহার না করে -P), আপনি অস্থায়ীভাবে ভিন্ন একটিতে একটি নতুন-লাইন অক্ষর প্রতিস্থাপন করতে পারেন এবং এটি আবার পরিবর্তন করতে পারেন, যেমন:

grep -o "_foo_" <(paste -sd_ file) | tr -d '_'

মূলত এটি সঠিক মিলের সন্ধান করছে _foo_যেখানে _মানে \n(তাই __= \n\n)। আপনাকে এটিকে আবার অনুবাদ করতে হবে না tr '_' '\n', কারণ প্রতিটি প্যাটার্ন যেভাবেই নতুন লাইনে মুদ্রিত হবে, সুতরাং অপসারণই _যথেষ্ট।


আমার অজ্ঞতা ক্ষমা করুন, কিন্তু প্রক্রিয়া বিকল্পটি ব্যবহার করছেন অন্য কোনও এনওএস পিক্সস সামঞ্জস্যপূর্ণ নয়, তাই অ-বহনযোগ্য বৈশিষ্ট্য? পজিক্স শেল আমি করতে পারি না <(p paste -sd_ file )?
humanityANDpeace

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