আমি কীভাবে গ্রেপগুলিতে কেবল সংখ্যা আনব?


57

আমার কাছে এ জাতীয় ফাইল রয়েছে:

 other lines . . .    
 blah blah blah (:34)

আমি উপরের ফাইলটিতে সংখ্যার উপস্থিতি খুঁজে পেতে চাই। আমি সাথে এসেছি:

grep [0-9] filename

তবে এটি পুরো মুদ্রণ করছে:

blah blah blah (:34)

বরং আমি চাই 34। এটি করার কোনও উপায় আছে?


ভবিষ্যতে, গ্রেপ (বা অন্য কোনও প্রোগ্রাম) এর জন্য ম্যান পৃষ্ঠাটিও দেখুন। ম্যান পৃষ্ঠাটি প্রোগ্রামটির অনেকগুলি সাধারণ ব্যবহারের জন্য প্রয়োজনীয় বিকল্পগুলি বিশদ দেয়। যেমনman grep
হ্নসরাত

আপনি এটি> গ্রেপ -o '[0-9] [0-9] *'

উত্তর:


75

আপনি grep -Eবর্ধিত নিয়মিত এক্সপ্রেশন সিনট্যাক্স অ্যাক্সেস করতে ব্যবহার করতে পারেন ( egrep হিসাবে একই )

আমি নীচের বিষয়বস্তু সহ একটি টেস্টফিল তৈরি করেছি:

>cat testfile
this is some text
with some random lines

again some text
ok now going for numbers (:32)
ok now going for numbers (:12)
ok now going for numbers (:132)
ok now going for numbers (:1324)

এখন আপনি যে পাঠ্যটি ব্যবহার করতে পারেন তা থেকে একাই সংখ্যা গ্রেপ করতে

>grep -Eo '[0-9]{1,4}' testfile
32
12
132
1324

আউটপুট হবে।

এখানে "-o" লাইনটির সম্পূর্ণ সামগ্রীর পরিবর্তে কেবলমাত্র লাইনের সাথে মিলে যাওয়া বিভাগকে আউটপুট করতে ব্যবহৃত হয়।

স্কুইগ্লি ব্র্যাকেটগুলি (যেমন {এবং}) ম্যাচের উদাহরণগুলির সংখ্যা নির্দেশ করে indicate {1,4} এর জন্য পূর্ববর্তী অক্ষর বা চরিত্রের শ্রেণিটি অন্তত একবার হওয়া উচিত, তবে চারবারের বেশি নয়।

আশাকরি এটা সাহায্য করবে


3
খুশী হলাম। এছাড়াও, 4 এর বেশি বা সংখ্যার অঙ্কের সংখ্যার সাথে মেলে, ব্যবহার করুন grep -Eo '[0-9]{1,}' testfile
ফ্র্যাক্টালস্পেস

8

আপনি পুনরায় বন্ধনী অভিব্যক্তি ব্যবহার করতে পারেন [:digit:]বিভাগে 9.3.5 দ্বারা নির্দিষ্ট POSIX মান , সঙ্গে একযোগে -oশুধুমাত্র ম্যাচিং "শব্দ" মুদ্রণ করার জন্য পতাকা

$ grep -o '[[:digit:]]*' <<< $'No number in this line\nbut 123 here'                                                     
123

5

grep -oলাইনের কেবল মিলের অংশটি মুদ্রণ করবে। অন্যথায় গ্রেপ প্যাটার্ন সহ যে কোনও লাইন মুদ্রণ করবে।


1

আমি আপনার ফাইলটি স্থানীয়ভাবে বা দূরবর্তীভাবে অ্যাক্সেস করতে কার্ল ব্যবহার করব, তারপরে আমি (:) মোড়ানো সংখ্যার সাথে লাইনগুলি গ্রেপ করব তারপরে সেই টুকরোগুলি কেটে ফাইলে লিখব

গৃহীত উত্তর উপেক্ষা করে ফাইলের পূর্ববর্তী লাইনে সংখ্যা থাকতে পারে, এটি উদাহরণস্বরূপ ডেটার জন্য কাজ করে তবে ফাইলটি দূরবর্তী হলে কী হবে?

স্থানীয়

curl file:///home/$USER/Public/input.txt  | grep -o '(:.*)' | cut -d ":" -f 2 | cut -d ")" -f 1 > output.txt

output.txtআপনার বর্তমান ফোল্ডারে এই উদাহরণে লিখিত থাকবে, আমরা input.txtআপনার সর্বজনীন ফোল্ডার থেকে অ্যাক্সেস করছি ।

দূরবর্তী

curl https://yoursite.com/Public/input.txt  | grep -o '(:.*)' | cut -d ":" -f 2 | cut -d ")" -f 1 > output.txt

output.txtআপনার বর্তমান ফোল্ডারে এই উদাহরণে লিখিত হবে, আমরা এর input.txtথেকে অ্যাক্সেস করছি https://yoursite.com/Public/


1
কেন curlএকটি সহজ যখন ব্যবহার catকরবেন?
পার্লডাক

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