কিভাবে আমি লিনাক্সে একটি টেক্সট ফাইল থেকে সূচকীয় পদ এবং ভাসমান বিন্দু সংখ্যা মুছে ফেলতে পারি?


1

একটি পাঠ্য ফাইল থেকে সূচকীয় পদ পদ এবং ভাসমান বিন্দু সংখ্যার সরাতে কি নিয়মিত অভিব্যক্তি ব্যবহার করা উচিত?

উদাহরণস্বরূপ আমার ফাইলটিতে নিম্নলিখিত শর্তাদি রয়েছে:

-0.161678
relational
0.081827
5.936420e-01
-0.155506
Favori54
0.086938
1.187284e+00
-0.149283
0.091921
"External"
1.780926e+00
-0.143025

আমি চাই আমার ফাইলে শুধুমাত্র নিম্নোক্ত লাইন রয়েছে:

relational
Favori54
"External"

কিভাবে এই উদাহরণ সম্পর্কে? regexr.com?36grk এটি সম্ভবত পরিমার্জিত / অপ্টিমাইজ করা যেতে পারে, যেহেতু এটি একটি সামান্য অশোধিত হতে পারে তবে এটি আপনার দেওয়া উদাহরণের জন্য কাজ করে। :)
omninonsense

উত্তর:


0

এটা আপনি আমার সাথে দেখায় যে লাইন যে কিছু দিয়ে শুরু করতে চান কিন্তু একটি অঙ্ক বা বিয়োগ চিহ্ন। এই আপনি পাবেন যে:

grep '^[^0-9,-]' file.txt

আপনি কি এই পরীক্ষা করেছেন? এটা কাজ করবে না। নিয়মিত অভিব্যক্তিটি কেবলমাত্র প্রথম অ-অঙ্কিত বা অ-বিয়োগ চিহ্নের সাথে মিলবে। এমনকি যদি আপনি যোগ করুন + যে শেষে প্রতীক, এটি এখনও জন্য মেলে না Favori54
omninonsense

আমি ওপিতে তালিকাবদ্ধ লাইন দিয়ে এটি পরীক্ষা করেছিলাম, এবং এটি আমার জন্য কাজ করে। grep প্যাটার্ন ধারণকারী কোন লাইন প্রিন্ট - এই ক্ষেত্রে, যে কোনো লাইন তার প্রথম অক্ষর হিসাবে কোন অ-অঙ্কিত-বা-বিয়োগ অক্ষর আছে। যেহেতু ট্যাগগুলি লিনাক্স নির্দিষ্ট করে, grep উপলব্ধ হবে।
evilsoup

আপনার সমাধান করার জন্য ধন্যবাদ কিন্তু আমার প্রয়োজন হিসাবে সাধারণ নয়। নিম্নলিখিতটি আসলে আমার যা দরকার তা সবই পাবেন না। egrep -x '\ - '' \ + + '' [[: অঙ্ক:]] + "'।' '' [[: অঙ্ক:]] +" 'ই' '' [[: পাঞ্চ:]] '' [[: অঙ্ক:]] + 'কিভাবে আমি শুধু এই বিপরীত? \
Umit Karabiyik

সমাধান পাওয়া গেছে! আমি শুধু ad-v পরামিতি প্রয়োজন। এখানে সবচেয়ে সাধারণ সংস্করণ: egrep -vx '\ - '' \ + + '' [[: সংখ্যা:]] + '\' '।' [[: সংখ্যা:]] + '' \ ই '' [[: Punct:]] '' [[: সংখ্যা:]] + '
Umit Karabiyik

আপনি উত্তর হিসাবে এটি লিখতে হবে (আপনি দুই দিনের আইআইআরসি পরে আপনার নিজের উত্তর গ্রহণ করতে পারেন)।
evilsoup

0
awk '/^[+-]?[0-9]+\.?[0-9]*([Ee][+-]?[0-9]+)?$/ { next }
     /^[+-]?\.[0-9]+([Ee][+-]?[0-9]+)?$/ { next }
     { print }' yourfile

নম্বরটির মন্তিসংশ অংশটি বিন্দু দিয়ে শুরু হতে পারে, বা ডট দিয়ে শেষ হতে পারে, তবে এটি একটি বিন্দু হতে পারে না: . বৈধ নয়, এবং মত একটি সূচক যোগ .E3 এটা বৈধ করা হয় না। 0. এবং .0 একটি এক্সপোনের সঙ্গে বা ছাড়া, বৈধ। ঘোষক একটি উপরের বা নিম্ন ক্ষেত্রে হতে পারে e, এবং একটি স্পষ্ট থাকতে পারে + চিহ্ন.

উল্লেখ্য যে এই ভাসমান-বিন্দু মানগুলির চারপাশে কোন হোয়াইটস্পেস অনুমান করা হয় না। এটি পূর্ণসংখ্যা মান মেলে। উপরন্তু, এটি জাঙ্ক অক্ষর বা যাই হোক না কেন, ভাসমান-বিন্দু নোটেশন থেকে পৃথক যা আইটেম মাধ্যমে পাস 1E+, 1.0A অথবা .0E+33x। উল্লেখ্য যে এই উদাহরণগুলির মধ্যে একটি বৈধ হিসাবে একটি ভাসমান-বিন্দু নোটেশন আছে উপসর্গ

সাধারণ নিয়ন্ত্রক অংশের পুনরাবৃত্তি এড়ানোর জন্য এবং সাধারণ নিয়মের ক্রিয়া এড়ানোর জন্য দুটি নিয়মিত এক্সপ্রেশনগুলিকে একত্রিত করা যেতে পারে। ফলাফল এমনকি কম পাঠযোগ্য, যদিও।

সর্বশেষে, { print } হতে পারে "কোড golfed" শুধু নিচে 1। এখনও বিক্রয়ের জন্য 1 বুলিয়ান সত্য, এবং একটি সত্য অবস্থা বা মিলে প্যাটার্ন জন্য awk এর ডিফল্ট কর্ম { print }


-1

এটা চেষ্টা কর:

awk '{if ($ 1 + 0! = $ 1) $ 0} মুদ্রণ করুন' filename.txt

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