আমার গ্রেপ + রেজেক্স কেন কাজ করছে না?


10

আমি সম্প্রতি সিদ্ধান্ত নিয়েছি যে যথেষ্ট যথেষ্ট - আমি গ্রাফ সাবলীলভাবে ব্যবহার করতে শিখছি। এটি তিন ঘন্টা হয়েছে এবং আমি ইতিমধ্যে এই খেলনা সমস্যা দ্বারা স্ট্যাম্পড।

আমি বর্তমানে একটি RAID5 অ্যারে সিঙ্ক করছি, যার অগ্রগতি পড়ার মাধ্যমে পর্যবেক্ষণ করা যেতে পারে /proc/mdstat। এর আউটপুট cat /proc/mdstatনীচে প্রদর্শিত হবে।

$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md1 : active raid5 sda4[0] sdb4[1] sdc4[2]
      5858765824 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
      [=============>.......]  resync = 67.3% (1972073120/2929382912) finish=205.7min speed=77537K/sec

md0 : active raid5 sda3[0] sdb3[1] sdc3[2]
      998400 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>

মজা করার জন্য, আমি ভেবেছিলাম যে আমি রিয়েল টাইমে watchমনিটরিং করব /proc/mdstat, পাইপটি এর আউটপুটটিকে গ্রেপ করে দেখাব এবং কেবলমাত্র আনুমানিক অবশিষ্ট সময় দেখাব।

আমার পন্থাটি নিম্নরূপ:

watch cat /proc/mdstat | grep finish=\d+\.\d | grep \d+\.\d

আমি কেন স্ট্যাম্পড আছি কেন এটির কোনও আউটপুট তৈরি হয়নি। প্রকৃতপক্ষে, প্রথম গ্রেপ এক্সপ্রেশনটি কোনও আউটপুট তৈরি করে না, যদিও মনে হয় এটি রেজিএক্স 101 এ কাজ করে ।

আমি কি ভুল করছি?


আপনি ব্যবহার করতে পারবেন না \dএবং সবসময় ভিতরে একটি রেজেেক্স উদ্ধৃত করতে পারেন grep। দেখুন ', grep' রেগুলার এক্সপ্রেশন সিনট্যাক্স
রাদু রেডানু

উত্তর:


20

আপনি যদি রেজেক্স সিনট্যাক্স ব্যবহার করতে চান তবে আপনার গ্রেপ সহ পি পি সুইচ দরকার। এখানে পূর্বে জিজ্ঞাসিত অনুমানগুলি পরীক্ষা করে দেখুন গ্রেপ সিনট্যাক্স কি রেজেক্স থেকে আলাদা?


দুর্দান্ত উত্তর - সংক্ষিপ্ত, সঠিক এবং বুটের অতিরিক্ত রেফারেন্স সহ! ধন্যবাদ!
blz

6
  • আপনার নিজের অভিব্যক্তিটি উদ্ধৃত করা উচিত যাতে শেলটি এর ব্যাখ্যা দেয় না
  • grepনেই \dপালাবার, আপনি ব্যবহার করতে হবে [0-9]পরিবর্তে।
  • +-Eসুইচ ছাড়া পালাতে হবে ।

এই কাজ করা উচিত:

watch cat /proc/mdstat | grep 'finish=[0-9]\+\.[0-9]' | grep '[0-9]\+\.[0-9]'

আমি ক্যানের উত্তর গ্রহণ করেছি কারণ -Pস্যুইচটি আমাকে এমনভাবে পুনরায় ব্যবহার করতে অনুমতি দেবে যা আমি ইতিমধ্যে বেশ আরামদায়ক। আমি এখনও আপনার উত্তরটিকে সমর্থন করছি, যদিও এটি একটি দুর্দান্ত সমাধান। আমি এটা মনে রাখব! ধন্যবাদ!
blz

3
@blz গ্রেপ নিয়মিত এক্সপ্রেশনগুলির 3 'স্টাইল' সমর্থন করে: "বেসিক" -জি (ডিফল্ট), "বর্ধিত" -ই এবং "পার্ল" -পি P বেসিক মোডের ?, +, {, |, (, and )বিশেষ অর্থ থাকার জন্য এড়ানো দরকার ।
কিরি

0

sedপরিবর্তে ব্যবহার করুন, এটি আমার জন্য কাজ করেছে:

watch "cat /proc/mdstat | grep 'finish\=' | sed -e 's/.*finish\=\([0-9,\.]*\).*/\1/g'"

ওপি " গ্রাফ সাবলীলভাবে ব্যবহার করতে শিখতে
রাদু রোদনু

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