ডিলিমিটারের আগে এমন সমস্ত লাইন মুছে ফেলুন যার n অক্ষর নেই


11

আমি খুব দীর্ঘ টেক্সট ফাইল (থেকে আছে এখানে ) যা (যা একটি অক্ষর হিসাবে প্রদর্শিত হবে এবং নিচের কোড markdown মধ্যে সঠিকভাবে প্রদর্শিত বলে মনে হচ্ছে না) একটি কয়েকটি শব্দ দ্বারা অনুসরণ 6 হেক্সাডেসিমেল অক্ষর তারপর একটি 'বিরতি' থাকা উচিত:

00107B  Cisco Systems, Inc
00906D  Cisco Systems, Inc
0090BF  Cisco Systems, Inc
5080    Cisco Systems, Inc
0E+00   ASUSTek COMPUTER INC.
000C6E  ASUSTek COMPUTER INC.
001BFC  ASUSTek COMPUTER INC.
001E8C  ASUSTek COMPUTER INC.
0015F2  ASUSTek COMPUTER INC.
2354    ASUSTek COMPUTER INC.
001FC6  ASUSTek COMPUTER INC.
60182E  ShenZhen Protruly Electronic Ltd co.
F4CFE2  Cisco Systems, Inc
501CBF  Cisco Systems, Inc

আমি আশেপাশে কিছু করার চেষ্টা করেছি এবং এমন কিছু দেখতে পাচ্ছি না যা এই পরিস্থিতিতে কাজ করবে। আমার প্রশ্ন হ'ল আমি কীভাবে এই টেক্সট ফাইলটির সমস্ত লাইন মুছে ফেলতে grep/ sed/ awk/ ব্যবহার করতে পারি perlযা ঠিক he হেক্সাডেসিমাল অক্ষর দিয়ে শুরু হয় না এবং তারপরে একটি 'বিরতি' হয়?

পিএস বোনাস পয়েন্টগুলির জন্য, হেক্স অক্ষর অনুসারে ফাইলের বর্ণানুক্রমিক এবং সংখ্যাসমূহ অনুসারে বাছাই করার সর্বোত্তম উপায় (যেমন 000000-> FFFFFF)? আমার কি শুধু ব্যবহার করা উচিত sort?

উত্তর:


13
$ awk '$1 ~ /^[[:xdigit:]]{6}$/' file
00107B  Cisco Systems, Inc
00906D  Cisco Systems, Inc
0090BF  Cisco Systems, Inc
000C6E  ASUSTek COMPUTER INC.
001BFC  ASUSTek COMPUTER INC.
001E8C  ASUSTek COMPUTER INC.
0015F2  ASUSTek COMPUTER INC.
001FC6  ASUSTek COMPUTER INC.
60182E  ShenZhen Protruly Electronic Ltd co.
F4CFE2  Cisco Systems, Inc
501CBF  Cisco Systems, Inc

এটি awkপ্রথম ক্ষেত্রের ঠিক ছয় হেক্সাডেসিমাল সংখ্যক লাইনগুলি নিষ্কাশন করতে ব্যবহার করে। [[:xdigit:]]প্যাটার্ন একটি হেক্সাডেসিমেল অঙ্ক মিলে যায়, এবং {6}তাদের মধ্যে ছয় প্রয়োজন। একসাথে ^এবং $যথাক্রমে মাঠের শুরু এবং শেষের দিকে অ্যাঙ্করিংয়ের সাথে , এটি কেবলমাত্র ওয়ান্টেড লাইনে মিলবে।

একটি নতুন নামে এটি সংরক্ষণ করতে কিছু ফাইল পুনর্নির্দেশ করুন।

নোট করুন যে এটি জিএনইউ awk(সাধারণত লিনাক্সে পাওয়া যায়) এর সাথে কাজ করে বলে মনে হয় তবে awkএটি ওপেনবিএসডি, বা এর সাথে নয় mawk


এর সাথে অনুরূপ পন্থা sed:

$ sed -n '/^[[:xdigit:]]\{6\}\>/p' file
00107B  Cisco Systems, Inc
00906D  Cisco Systems, Inc
0090BF  Cisco Systems, Inc
000C6E  ASUSTek COMPUTER INC.
001BFC  ASUSTek COMPUTER INC.
001E8C  ASUSTek COMPUTER INC.
0015F2  ASUSTek COMPUTER INC.
001FC6  ASUSTek COMPUTER INC.
60182E  ShenZhen Protruly Electronic Ltd co.
F4CFE2  Cisco Systems, Inc
501CBF  Cisco Systems, Inc

এই অভিব্যক্তিটিতে, \>হেক্সাডেসিমাল সংখ্যার শেষের সাথে মেলে ব্যবহৃত হয়। এটি নিশ্চিত করে যে দীর্ঘ সংখ্যার সাথে মেলে না। \>প্যাটার্ন একটি ম্যাচ শব্দ সীমানা , অর্থাত্ একটি শব্দ চরিত্র ও একটি নন-শব্দ চরিত্র মধ্যে শূন্য প্রস্থ স্থান।


ফলস্বরূপ ডেটা বাছাইয়ের জন্য, কেবল ফলাফল ট্রাইটি পাইপ করুন sort, বা sort -fযদি আপনার হেক্সাডেসিমাল সংখ্যাগুলি উপরের এবং নিম্নের উভয় অক্ষর ব্যবহার করে


1
নিখুঁত, আপনাকে অনেক ধন্যবাদ। ঠিক আমি খুঁজছেন ছিল কি!
রোকো

8

এবং সম্পূর্ণতার জন্য, আপনি গ্রেপ দিয়ে এটিও করতে পারেন:

$ grep -E '^[[:xdigit:]]{6}\b' oui.txt 
00107B  Cisco Systems, Inc
00906D  Cisco Systems, Inc
0090BF  Cisco Systems, Inc
000C6E  ASUSTek COMPUTER INC.
001BFC  ASUSTek COMPUTER INC.
001E8C  ASUSTek COMPUTER INC.
0015F2  ASUSTek COMPUTER INC.
001FC6  ASUSTek COMPUTER INC.
60182E  ShenZhen Protruly Electronic Ltd co.
F4CFE2  Cisco Systems, Inc
501CBF  Cisco Systems, Inc
$ 

এই প্রসারিত গ্রেপ এক্সপ্রেশনটি প্রতিটি লাইনের শুরুতে ঠিক 6 হেক্স ডিজিটের সন্ধান করে, তত্ক্ষণাত একটি সাদা-স্থান-থেকে-সাদা অংশের সীমানা ( \b) অনুসরণ করে।

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