কেবল লাইন নম্বরগুলি রিপোর্ট করতে গ্রেপ ব্যবহার করুন


105

আমার কাছে একটি ফাইল রয়েছে যা সম্ভবত খারাপ ফর্ম্যাটিং রয়েছে (এই ক্ষেত্রে, প্যাটার্নের উপস্থিতি \\backslash)। আমি grepকেবল যেখানে লাইন সংখ্যাগুলি ঘটে সেখানে ফিরে আসতে ব্যবহার করতে চাই (যেমনটি ম্যাচটি এখানে ছিল, লাইন # এক্সে যান এবং এটি ঠিক করুন)।

তবে লাইন নম্বর ( grep -n) প্রিন্ট করার কোনও উপায় বলে মনে হচ্ছে না এবং নিজেই ম্যাচ বা লাইন নয়।

আমি লাইন নম্বরগুলি বের করার জন্য অন্য রেইগেক্স ব্যবহার করতে পারি, তবে আমি নিশ্চিত করতে চাই যে গ্রেপ নিজে নিজে এটি করতে পারে না। grep -noআমি মনে করি নিকটে আসে, তবে এখনও ম্যাচটি প্রদর্শন করে।


1
আমার জন্য সবচেয়ে দরকারী উত্তরটি ছিল প্রশ্ন grep -no:! আমি এখানে এসেছি যা চেষ্টা এবং করতে এসেছি! (অর্থাত লাইন যা কখনও খুব দীর্ঘ, যেমন, জাভাস্ক্রিপ্ট সোর্স ফাইল minified মুদ্রণ করতে।)
LondonRob

উত্তর:


156

চেষ্টা করে দেখুন:

grep -n "text to find" file.ext | cut -f1 -d:

1
আমার মেশিনে, এটি কেবল লাইন সংখ্যা ছাড়াই ম্যাচ করা ফাইলগুলি মুদ্রণ করছে (সুতরাং যদি কোনও ফাইলের মধ্যে আমার 3 টি ম্যাচ থাকে তবে এটি কেবল একবার মুদ্রিত হয়) যা এখনও খুব দরকারী ...
মারিও আবাদ

3
@ মারিওআওয়াদ, আপনার উচিত পরম কারসাজি করা -f। আমার জন্য ছিল -f2। (জানুন এটি পুরানো জিনিস, তবে আমি মনে করি এটি কিছু দরিদ্র আত্মাকে সাহায্য করতে পারে)
এমিল সিয়েরগা

সুদৃশ্য পুরানো ইউনিক্স অ্যাডহক শেল স্ক্রিপ্টিং জন্য ধন্যবাদ। এটি দেখায় যে নমনীয় সরঞ্জামগুলি তাদের জটিলতা এবং শেখার বক্ররেখার পক্ষে মূল্যবান!
অ্যালেক্স

12
grep -n "text to find" file.ext | cut -f1,2 -d:ফাইলের নাম এবং লাইন নম্বর দেখায়।
Jondlm

2
@ জন্ডিম এটি কেবলমাত্র একাধিক ফাইল অনুসন্ধান করা থাকলে ফাইলের নাম দেখায়; -Hযখন কেবলমাত্র একটি ফাইল থাকে তখন আপনাকে ফাইলের নামটি প্রদর্শন করতে বাধ্য করার জন্য এটি যুক্ত করতে হবে। বিপরীতভাবে, আপনি সর্বদা -hএটি বলার জন্য ব্যবহার করতে পারেন যে আপনি কতগুলি ফাইল গ্রেপ করছেন তা নির্ধারণ না করেই ফাইলনামটি আউটপুট না করে।
মার্ক রিড

45

আপনি যদি এডাব্লুকে ব্যবহারের জন্য উন্মুক্ত হন:

awk '/textstring/ {print FNR}' textfile

এই ক্ষেত্রে, এফএনআর হ'ল লাইন নম্বর। আপনি গ্রেপ | কাট, বা আপনি যে কোনও সময় গ্রেপ আউটপুট নিতে এবং এটি পরিচালনা করতে চাইছেন তখন এডাব্লুকে এক দুর্দান্ত সরঞ্জাম।


2
একটি প্রক্রিয়া ব্যবহার করে (যা অতীতে অধিকতর গুরুত্বপূর্ণ, তবে এখনও) এবং অ্যাডাব্লিক প্রাথমিকের জন্য বোঝার পক্ষে যথেষ্ট সহজ!
বিজিস্ট্যাক 15

NRএই ক্ষেত্রে যেমন কেবল একটি ফাইল পরীক্ষা করা হচ্ছে তখনও কাজ করে।
মার্ক রিড

কেবল উজ্জ্বল! এত দ্রুত!
জিটিডোরভ

34

এই সমস্ত উত্তরগুলির পুরো মিলে যাওয়া লাইনগুলি তৈরি করতে গ্রেপ প্রয়োজন, তারপরে এটি অন্য প্রোগ্রামে পাইপ করুন। যদি আপনার লাইনগুলি খুব দীর্ঘ হয় তবে লাইন সংখ্যাগুলি আউটপুট দেওয়ার জন্য কেবল সেড ব্যবহার করা আরও দক্ষ হতে পারে:

sed -n '/pattern/=' filename


1

আমি পুরো ম্যাচিং লাইনটি ব্যবহার না করে এবং তারপরে আউটপুট থেকে বা অন্য কোনও সরঞ্জাম দিয়ে সরিয়ে দেওয়ার পরিবর্তে উত্তরগুলি কেবলমাত্র লাইন নম্বর পেতে sedএবং তার awkজন্য প্রস্তাবিত করছি । সম্পূর্ণতার জন্য, আপনি পার্ল ব্যবহার করতে পারেন:grepcut

perl -nE '/pattern/ && say $.' filename

বা রুবি:

ruby -ne 'puts $. if /pattern/' filename

0

আপনি প্রথম নয়, কোলনের পরে দ্বিতীয় ক্ষেত্র চাইবেন।

grep -n "text to find" file.txt | cut -f2 -d:


আপনি যদি টেক্সটের সাথে মিল রাখতে চান তবে এটি কাজ করে তবে ক্ষেত্রে লাইন নম্বরটি ওপি যা চেয়েছিল তা হ'ল।
এজেপি

0

প্যাটার্নটির সাথে মিলিত লাইনের সংখ্যা গণনা করতে:

grep -n "Pattern" in_file.ext | wc -l 

মিলিত প্যাটার্ন নিষ্কাশন করতে

sed -n '/pattern/p' file.est

যে প্যাটার্নটির সাথে মিলছে তার রেখা সংখ্যাগুলি প্রদর্শন করতে

grep -n "pattern" file.ext | cut -f1 -d:

2
1 ম কেবল "গ্রেপ-সি 'প্যাটার্ন' ইন_ফাই.একেক্সট" হওয়া উচিত। দ্বিতীয়টি "গ্রেপ -o 'প্যাটার্ন" in_file.ext "হওয়া উচিত। সেড বা ডাব্লুসিটি জড়িত করার প্রয়োজন নেই।
thelogix

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