انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید




نویسنده موضوع: در مورد دستور grep (حل شد)  (دفعات بازدید: 820 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین abdossamad2003

  • Full Member
  • *
  • ارسال: 157
در مورد دستور grep (حل شد)
« : 22 خرداد 1397، 06:22 ب‌ظ »
[samad@localhost test]$ head s1
depth lat lon SALT
0.0 -89.875 -179.875 34.02139
0.0 -89.875 -179.625 33.989212
0.0 -89.875 -179.375 33.989212
0.0 -89.875 -179.125 33.989212
0.0 -89.875 -178.875 33.989212
0.0 -89.875 -178.625 33.98929
0.0 -89.875 -178.375 33.98929
0.0 -89.875 -178.125 33.98929
0.0 -89.875 -177.875 33.98929


[samad@localhost test]$ grep -e "-89.875 -179.875" s1
[samad@localhost test]$

با سلام خدمت دوستان
سوال من اینه که چرا دستور grep نتوانست عبارت فوق را در فایل s1  که موجود هم بود پیدا کند!! آیا باید آپشن جدید به دستور grep باید اضافه شود

با تشکر
« آخرین ویرایش: 23 خرداد 1397، 02:44 ق‌ظ توسط abdossamad2003 »

آفلاین علی رزم دیده

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1244
  • جنسیت : پسر
  • ali76 سابق
پاسخ : در مورد دستور grep
« پاسخ #1 : 22 خرداد 1397، 07:29 ب‌ظ »
با سلام
شما قبل از اینکه grep استفاده کنین باید ببینین کارکتر های فایل شما چیا هستن.
می تونین این کارو با تبدیل متن فایل به کد اسکی انجام بدین :
sed -n '2p' s1 | od -An -vtu1
  48  46  48   9  45  56  57  46  56  55  53   9  45  49  55  57
  46  56  55  53   9  51  52  46  48  50  49  51  57  10
اگه به خروجی دستور بالا توجه کنین می بینین که کارکتر بین اون دو ستون اسپیس نیست (کد اسکی 32 - SP) ، بلکه بین اون دو ستون تب قرار داره (کد اسکی 9 - HT).

پس حالا می تونین با این دستور grep بگیرین :
grep -Pe "-89.875\t-179.625" s1

آفلاین abdossamad2003

  • Full Member
  • *
  • ارسال: 157
پاسخ : در مورد دستور grep
« پاسخ #2 : 23 خرداد 1397، 01:24 ق‌ظ »
با تشکر از پاسخ دوست عزیز
در مثال فوق فاصله بین 0.0 و 89.875- را چی قرار دهیم ( با توجه به کد اسکی شما که احتمالا 48 در خروجی دستور شما می باشد )

با تشکر دوباره

آفلاین علی رزم دیده

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1244
  • جنسیت : پسر
  • ali76 سابق
پاسخ : در مورد دستور grep
« پاسخ #3 : 23 خرداد 1397، 01:28 ق‌ظ »
خواهش می کنم دوست عزیز.

بین 0.0 و 89.875- هم ، همچنان ht قرار داره. (48 مربوط به 0 هستش و 46 مربوط به . و 48 بعدی مربوط به 0 بعدی و اگه دقت کنین بعد اون 9 قرار داره)

پس هم چنان می تونین از این دستور استفاده کنین :
grep -Pe "0.0\t-89.875" s1

آفلاین abdossamad2003

  • Full Member
  • *
  • ارسال: 157
پاسخ : در مورد دستور grep
« پاسخ #4 : 23 خرداد 1397، 01:53 ق‌ظ »
با تشکر
ابتدا یک مرجع که شما از آن این دستورات و اصظلاحات را یاد گرفته اید معرفی کنید
دوم : در مثال زیر که خروجی آن زیاد است و قسمتی را نشان دادم
[samad@localhost test]$ grep -Pe '51.125\t38.125' SALT.txt
0.0 -51.125 38.125 33.8183
0.0 51.125 38.125 6.04349
5.0 -51.125 38.125 33.80809
5.0 51.125 38.125 10.948
10.0 -51.125 38.125 33.800213
10.0 51.125 38.125 10.197109
15.0 -51.125 38.125 33.79801
15.0 51.125 38.125 17.98969
20.0 -51.125 38.125 33.80941
20.0 51.125 38.125 18.0277
25.0 -51.125 38.125 33.815212
25.0 51.125 38.125 18.03911
30.0 -51.125 38.125 33.8239
30.0 51.125 38.125 18.04411
35.0 -51.125 38.125 33.8278
35.0 51.125 38.125 18.06271
40.0 -51.125 38.125 33.83239
40.0 51.125 38.125 18.098991
45.0 -51.125 38.125 33.8399
^C



مشکل اینجاست که نمی خواهم سطرهای مربوط به 51.125- نشان داده شود چون در دستور فوق 51.125 را قرار داده ام


آفلاین علی رزم دیده

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1244
  • جنسیت : پسر
  • ali76 سابق
پاسخ : در مورد دستور grep
« پاسخ #5 : 23 خرداد 1397، 02:26 ق‌ظ »
خواهش می کنم

وقتی شما دارین توی grep از 51.125 استفاده می کنین هر کلمه یا عبارتی که این عدد جزئی از اون باشه هم تو خروجی به نمایش در میاد اگه شما می خواین فقط 51.125 انتخاب بشه می تونین از این دستور استفاده کنین (در واقع این دستور می گه که اون اعدادی که پشتشون تب وجود داره انتخاب بشن) :
grep -Pe "\t51.125\t38.125" SALT.txt
هم چنین تو موارد مشابه می تونین از سوییچ -w مربوط به grep هم استفاده کنین.

در مورد اون یکی سوالتون هم من این کتاب ها رو برای بش مطالعه کردم:
نقل‌قول
bash Cookbook - Carl Albing, JP Vossen, and Cameron Newham
Linux Shell Scripting Essentials - Sinny Kumari
و بعد از اون ها مطالعه ی man پیج ها خیلی مفید می تونه باشه.

آفلاین abdossamad2003

  • Full Member
  • *
  • ارسال: 157
پاسخ : در مورد دستور grep
« پاسخ #6 : 23 خرداد 1397، 02:43 ق‌ظ »
با تشکر