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

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

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




نویسنده موضوع: جدا کردن یک قسمت از متن  (دفعات بازدید: 2990 بار)

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

آفلاین sajjad93

  • Sr. Member
  • *
  • ارسال: 294
جدا کردن یک قسمت از متن
« : 27 دی 1393، 05:37 ب‌ظ »
چجوری با ترمینال میشه تو یه فایل txt یا html یا که توش کلی متن هست چندتا لینک با پسوند مخصوص مثلا pdf یا mp4 و... رو جدا کرد مثلا تو این متن خط ۷۹۸ یه لینک با پسوند .mp4 وجود داره می خوام اون رو جدا کنم و توی ترمینال نمایش بدم:
http://paste.ubuntu.com/9767443/

آفلاین سلمان م.

  • ناظر انجمن
  • *
  • ارسال: 4106
  • جنسیت : پسر
  • GNU Operating System - سیستم عامل گنو
پاسخ : جدا کردن یک قسمت از متن
« پاسخ #1 : 27 دی 1393، 06:39 ب‌ظ »
به صورت کلی برای این‌جور کارها از awk استفاده می‌شه و برای ویرایش از sed.

سینتکس اون هم خیلی ساده هست،
برای پیدا کردن و نشان دادن تمام خط‌هایی که دارای pattern1 هستند.
awk '/pattern1/ {print}' matne-morede-nazar.txt

برای پیدا کردن و نشان دادن تمام خط‌هایی که دارای pattern1 یا pattern2 یا  pattern3 یا pattern4 هستند.
awk '/pattern1|pattern2|pattern3|pattern4/ {print}' matne-morede-nazar.txt

برای patternها می‌شه از regular syntax که به طور خلاصه بهش می‌گن (regex یا regexp) استفاده کرد.

برای ذخیره کردنش هم از < استفاده می‌شه.
awk '/pattern1/ {print}' matne-morede-nazar.txt > file-zakhire-shode.txt
با این توضیح‌ها فرض می‌کنیم اسم فایل شما matn.html هست، پس می‌شه:
awk '/mp4/ {print}' matn.htmlکه هرخطی رو که دارای mp4 باشه نشون می‌ده ولی از اون‌جایی که خط‌هایی که ما می‌خوایم این نیست:
        <meta name="video_type" content="video/mp4" />پس بهش می‌گیم فقط اون‌هایی که قبلش نقطه هست بهمون بده، که می‌شه:
awk '/\.mp4/ {print}' matn.html
نکته: توی regular expression نقطه (.) به معنای این هست که یک کاراکتر هست که برای ما مهم نیست، هرچی می‌تونه جاش رو بگیره. (اصطلاحاً به این‌ها می‌گن meta character) و برای اینکه بهش حالی کنیم که منظور ما این نیست که هر کاراکتری بلکه منظور ما خود نقطه هست اصطلاحالاً باید اون رو escape کنیم که با استفاده از back slash قبل از اون این کار می‌شه
\.
« آخرین ویرایش: 27 دی 1393، 09:36 ب‌ظ توسط سلمان م. »

آفلاین sajjad93

  • Sr. Member
  • *
  • ارسال: 294
پاسخ : جدا کردن یک قسمت از متن
« پاسخ #2 : 27 دی 1393، 08:36 ب‌ظ »
ممنون از پاسخ خوبتون.
من این کار رو کردم از الگوی آخری استفاده کردم هم لینک رو آورد هم یک سری از تگ های html رو علاوه بر لینک تو نتیجه میاره(کل سطر ۷۹۸ رو میاره) چجوری می شه فقط لینک رو تو نتیجه بیاره؟

آفلاین Ghost Shadow

  • High Hero Member
  • *
  • ارسال: 1803
  • جنسیت : پسر
  • Linux is Secured By Design
پاسخ : جدا کردن یک قسمت از متن
« پاسخ #3 : 27 دی 1393، 08:58 ب‌ظ »
من یه بار واسه mp3 همچین چیزی میخواستم رسیدم به این که به جاش mp4 نوشتم :D
sed -n 's/.*href="\([^"]*\).*/\1/p' index.html | grep ".mp4"تکه اول فقط url ها رو لیست میکنه و دومی هم .mp4 هاش رو جدا میکنه و نشون میده.

آفلاین sajjad93

  • Sr. Member
  • *
  • ارسال: 294
پاسخ : جدا کردن یک قسمت از متن
« پاسخ #4 : 27 دی 1393، 09:24 ب‌ظ »
من یه بار واسه mp3 همچین چیزی میخواستم رسیدم به این که به جاش mp4 نوشتم :D
sed -n 's/.*href="\([^"]*\).*/\1/p' index.html | grep ".mp4"تکه اول فقط url ها رو لیست میکنه و دومی هم .mp4 هاش رو جدا میکنه و نشون میده.
ممنون کار کرد  :)

آفلاین sajjad93

  • Sr. Member
  • *
  • ارسال: 294
پاسخ : جدا کردن یک قسمت از متن
« پاسخ #5 : 27 دی 1393، 10:26 ب‌ظ »
من یه بار واسه mp3 همچین چیزی میخواستم رسیدم به این که به جاش mp4 نوشتم :D
sed -n 's/.*href="\([^"]*\).*/\1/p' index.html | grep ".mp4"تکه اول فقط url ها رو لیست میکنه و دومی هم .mp4 هاش رو جدا میکنه و نشون میده.
روی این فایل لینک های pdf رو پیدا میکنه ولی لینک های mp3 با این که وجود دارند پیدا نمیکنه مشکل چیه؟  :o

آفلاین Ghost Shadow

  • High Hero Member
  • *
  • ارسال: 1803
  • جنسیت : پسر
  • Linux is Secured By Design
پاسخ : جدا کردن یک قسمت از متن
« پاسخ #6 : 27 دی 1393، 11:21 ب‌ظ »
نمیدونم انگار یه کم از لحاظ ساختاری ایراد داره :D
دو تا لینک پشت سر هم هستند. اولی که pdf باشه رو میبینه و وقتی تموم شد باقیش رو اسکیپ میکنه :D
فایل رو درست کردم الان میشه.(اینو باید ببینم چه میشه کرد :P)

آفلاین دانیال بهزادی

  • ناظر انجمن
  • *
  • ارسال: 19687
  • جنسیت : پسر
  • Urahara Kiesuke
    • وبلاگ
پاسخ : جدا کردن یک قسمت از متن
« پاسخ #7 : 28 دی 1393، 10:55 ق‌ظ »
یه راه خیلی ساده‌تر:
$ mech-dump --links FILE | grep mp4
اگه این ارسال بهت کمک کرد، دنبال دکمهٔ تشکر نگرد. به جاش تو هم به جامعهٔ آزادت کمک کن

آفلاین sajjad93

  • Sr. Member
  • *
  • ارسال: 294
پاسخ : جدا کردن یک قسمت از متن
« پاسخ #8 : 28 دی 1393، 06:18 ب‌ظ »
نمیدونم انگار یه کم از لحاظ ساختاری ایراد داره :D
دو تا لینک پشت سر هم هستند. اولی که pdf باشه رو میبینه و وقتی تموم شد باقیش رو اسکیپ میکنه :D
فایل رو درست کردم الان میشه.(اینو باید ببینم چه میشه کرد :P)
ممنون  ;)
یکم گشتم اینو پیدا کردم که تا الان خوب جواب داده:  :P
grep -Po '(?<=href=")[^"]*' filename | grep -E '(.mp3|.pdf)'

آفلاین sajjad93

  • Sr. Member
  • *
  • ارسال: 294
پاسخ : جدا کردن یک قسمت از متن
« پاسخ #9 : 28 دی 1393، 06:23 ب‌ظ »
یه راه خیلی ساده‌تر:
$ mech-dump --links FILE | grep mp4
ممنون.
لینک های mp3 و pdf رو تو فایلی که پست قبلی اتچ کردم پیدا نکرد.( انگار فایلی که اتچ کردم یکم بد قلقه  ;D )

آفلاین Ghost Shadow

  • High Hero Member
  • *
  • ارسال: 1803
  • جنسیت : پسر
  • Linux is Secured By Design
پاسخ : جدا کردن یک قسمت از متن
« پاسخ #10 : 28 دی 1393، 06:31 ب‌ظ »
یه راه خیلی ساده‌تر:
$ mech-dump --links FILE | grep mp4
ممنون.
لینک های mp3 و pdf رو تو فایلی که پست قبلی اتچ کردم پیدا نکرد.( انگار فایلی که اتچ کردم یکم بد قلقه  ;D )
برای من واسه قایلی که دادی کار کرد. :D
چه جوری زدی؟

آفلاین sajjad93

  • Sr. Member
  • *
  • ارسال: 294
پاسخ : جدا کردن یک قسمت از متن
« پاسخ #11 : 28 دی 1393، 06:53 ب‌ظ »
یه راه خیلی ساده‌تر:
$ mech-dump --links FILE | grep mp4
ممنون.
لینک های mp3 و pdf رو تو فایلی که پست قبلی اتچ کردم پیدا نکرد.( انگار فایلی که اتچ کردم یکم بد قلقه  ;D )
برای من واسه قایلی که دادی کار کرد. :D
چه جوری زدی؟
درسته کار میکنه!
تو یه فایل دیگه اجرا کردم اون فایل اصلا mp3 نداشت    ;D