গ্রেপ কমান্ড ব্যবহার করে প্রথম লাইনটি কীভাবে প্রিন্ট করা যায়?


17

আমার কাছে একটি ফাইল আছে file.txt। আমি কেবল grepকমান্ডটি ব্যবহার করে প্রথম লাইনটি কীভাবে মুদ্রণ করব ?


4
head -1 file.txtকাজ করবে না?
clk

@ স্টাইলড্রাইভারের আপনাকে এটিকে একটি উত্তর হিসাবে তৈরি করা দরকার কারণ এটি গ্রেপ দিয়ে কাজ করার উপায়, কাজের জন্য আশ্চর্যরূপে নির্বাচিত সরঞ্জাম।
মেলবারসালান

1
grepকোনও ফাইলের প্রথম লাইন মুদ্রণের জন্য সেরা সরঞ্জাম নয়। যদি আপনি কেবল বোঝাতে চেয়েছিলেন যে আপনি প্রথম লাইনটির সাথে মেলে grepবা মুদ্রণ করতে চেয়েছিলেন , বা যদি আপনার কিছু নির্দিষ্ট ব্যবহার থাকে grepতবে দয়া করে আমাদের তা জানান। আমাদের আরও প্রসঙ্গ থাকলে, সম্ভবত আমরা একটি উত্তর দিতে পারতাম যা আপনাকে এবং সম্প্রদায়কে আরও ভালভাবে সহায়তা করবে।
ডিজিিং

@ মেলবার্স্লান ফাইল-টেক্সটে আমার কাছে তিনটি লাইন রয়েছে উদাহরণস্বরূপ: এটি একটি নতুন ফাইল। দ্বিতীয় লাইন: ফাইলটির নাম নতুন ফাইল তৃতীয় লাইন: আমি নতুন লাইনটি তৈরি করি নি। সুতরাং গ্রেপ কমান্ড ব্যবহার করে আমি কীভাবে কেবল প্রথম লাইনটি প্রিন্ট করব? এছাড়াও কোন আদেশটি আমাকে প্রথম এবং শেষ লাইন উভয়ই মুদ্রণ করতে সহায়তা করবে? আপনি কি দয়া করে আমাকে উভয় প্রশ্নের জন্য আদেশগুলি বলতে পারেন?
নিতিন সন্তোষ

যদি বিদ্যমান উত্তরগুলির কোনও আপনার সমস্যার সমাধান করে, দয়া করে এটি চেকমার্কের মাধ্যমে গ্রহণ করার বিষয়টি বিবেচনা করুন। ধন্যবাদ!
জেফ শ্যাচলার

উত্তর:


38

যদিও এটি গ্রেপের একটি অপ্রচলিত প্রয়োগ, আপনি এটি ব্যবহার করে এটি করতে পারেন

grep -m1 "" file.txt

এটি কাজ করে কারণ খালি অভিব্যক্তিটি কোনও কিছুর সাথে মেলে, যখন -m1গ্রেপকে প্রথম ম্যাচের পরে বেরিয়ে আসে

-m NUM, --max-count=NUM
       Stop reading a file after NUM matching lines.

চকোলেট-কভার কলা দেখানোর জন্য +1 এখানে যতটা ভাবছিলাম তত অকেজো নয়।
কামিল ম্যাকিয়েরোভস্কি

4
এটি কিছু সিস্টেমে কাজ করতে পারে তবে এটি বহনযোগ্য নয়:grep: unknown option -- m
কুসালানন্দ

1
'প্রথম লাইন' এবং 'প্রথম লাইনটির মিল' এর মধ্যে পার্থক্যটি লক্ষ্য করুন
চার্লস

13

এটি কিছু grepনা। "গ্রেপ" নামটি নিজেই " বিশ্বব্যাপী নিয়মিত প্রকাশ এবং মুদ্রণ অনুসন্ধান করুন " এর সংক্ষিপ্ত রূপ , যা edকমান্ডটি g/re/pদেয় (প্রদত্ত নিয়মিত প্রকাশের জন্য re)।

ed1969 সাল থেকে একটি ইন্টারেক্টিভ লাইন সম্পাদক, তবে এটি সম্ভবত আপনার সিস্টেমে আজই ইনস্টল করা আছে। আমরা পেয়েছিলাম grepথেকে ed, এবং এটি একটি শর্টকাট ওরফে একটি নির্দিষ্ট কার্যকারিতার জন্য হিসেবে দেখা যেতে পারে ed, এবং sed, যা "stream- হয় ed", অর্থাত একটি (অ-ইন্টারেক্টিভ) প্রবাহ এডিটর।

sedপরিবর্তে ব্যবহার করুন:

$ sed -n '1p' file.txt

1pস্ট্রিং একটি ক্ষুদ্র হয় sed"স্ক্রিপ্ট" যে কপি করে প্রিন্ট ( p) লাইন দেওয়া ঠিকানা (সংশ্লিষ্ট 1, প্রথম লাইন)। সম্পাদনা কমান্ডটি 1p(কোনও আশ্চর্যজনক) edউপায়টি সম্পাদকের ক্ষেত্রে একই কাজ করবে।

-nকিছু স্পষ্টভাবে স্ক্রিপ্ট দ্বারা প্রিন্ট করা আউটপুট শুষে তাই সব আমরা পেতে ফাইলের প্রথম লাইন file.txt

বিকল্পভাবে:

$ sed '1q' file.txt

এটি ফাইলের সমস্ত লাইন qমুদ্রণ করে তবে লাইন 1 এ প্রিন্ট করে (এটি মুদ্রণের পরে)। এটি হুবহু সমতুল্য head -n 1 file.txt

পসিক্স স্ট্যান্ডার্ডে এটি বলে (সাধারণীকরণ) যা head -n Nঅনেকটা একইরকম sed 'Nq', যেমন "প্রতিটি লাইন প্রিন্ট করুন, তবে লাইনে প্রস্থান করুন N"। headমানটিকে মোটেও অন্তর্ভুক্ত করার কারণটি ছিল tail(এবং বিদ্যমান ইউনিক্স বাস্তবায়নের সাথে সামনের দিকে সামঞ্জস্য) m


এটি সবচেয়ে আলোকিত উত্তর, প্রথম উত্তরটি একটি অদ্ভুত হ্যাক। আমি জানতাম যে এখানে কিছু অদ্ভুত ছিল, গ্রেপ এবং এডের ইতিহাস দেখানোর জন্য আপনাকে ধন্যবাদ। সব কিছু এখন অর্থপূর্ণ মনে হচ্ছে।
টমাস জুবিরি

6

প্রথম লাইনে একটি অনন্য স্ট্রিং না থাকলে আপনি কেবল গ্রেপ ব্যবহার করে এটি করতে পারবেন না। head -n 1 file.txtতার জায়গায় কাজ করবে।

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

head -n 1 * | grep [pattern]


2

তবুও গ্রেপের আরও একটি অপ্রচলিত ব্যবহার - একটি শোয়ার্জিয়ান ট্রান্সফর্ম যা লাইনগুলি সংখ্যার জন্য বিভিন্ন গিরিশনগুলির মধ্য দিয়ে যায়, তারপরে লাইন নম্বরটি অনুসন্ধানের জন্য গ্রেপ ব্যবহার করে, আবার লাইন নম্বরটি সরিয়ে ফেলা:

function grep1() (
  nlines=$(wc -l < "$1")
  nlw=$(printf "%d" "$nlines" | wc -c)
  nl -d '\n' -ba -n ln -w "$nlw" -s ' ' "$1" | grep '^1 ' | sed 's/^1 *//'
)

function greplast() (
  nlines=$(wc -l < "$1")
  nlines=$((nlines + 0))
  nlw=$(printf "%d" "$nlines" | wc -c)
  nl -d '\n' -ba -n ln -w "$nlw" -s ' ' "$1" | grep "^$nlines " | sed "s/^$nlines *//"
)

আমি এই উত্তরটি এখানে ধারণার উদাহরণ হিসাবে রাখছি যে আপনি (গ্রেপ বা বাশ বা ... ইত্যাদি) কিছু করতে পারেন তার অর্থ এই নয় যে আপনার উচিত - কাজের জন্য সম্ভবত আরও ভাল সরঞ্জাম রয়েছে। শেড ( sed 1qবা sed -n 1p) এবং মাথা ( head -n 1) হ'ল কোনও ফাইল থেকে প্রথম লাইনটি প্রিন্ট করার জন্য আরও উপযুক্ত সরঞ্জাম। কোনও ফাইলের শেষ লাইনটি মুদ্রণের জন্য আপনার কাছে আছে tail -n 1বাsed -n '$p'। এই সরঞ্জামগুলি কেবলমাত্র একক আদেশ নয় (উপরের ফাংশনগুলিতে 3+ এর পরিবর্তে), এগুলি ভবিষ্যতের পাঠকদের জন্যও আরও স্পষ্ট - সম্ভবত নিজেই! - তারা যে স্ক্রিপ্টগুলির মধ্যে রয়েছে While যদিও আমি আপনার প্রশ্নের একজন (বর্তমানে ৩ জন) ভোটারদের মধ্যে একজন নই, তবে সম্ভবত এই সম্ভাবনা রয়েছে যে কাজের জন্য একটি স্বেচ্ছাসেবী সরঞ্জামের (কোনও সমর্থনকারী কারণ ছাড়াই) আপনার জোর কারণ হ'ল ডাউনভোটস এটা অত্যন্ত অসম্ভাব্য একটি সিস্টেম আছে যে grepএছাড়াও নেই head, tailএবং sed

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