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

کمک و پشتیبانی => راهنماها، نکات و ترفندها => نویسنده: sajjad93 در 27 دی 1393، 05:37 ب‌ظ

عنوان: جدا کردن یک قسمت از متن
ارسال شده توسط: sajjad93 در 27 دی 1393، 05:37 ب‌ظ
چجوری با ترمینال میشه تو یه فایل txt یا html یا که توش کلی متن هست چندتا لینک با پسوند مخصوص مثلا pdf یا mp4 و... رو جدا کرد مثلا تو این متن خط ۷۹۸ یه لینک با پسوند .mp4 وجود داره می خوام اون رو جدا کنم و توی ترمینال نمایش بدم:
http://paste.ubuntu.com/9767443/ (http://paste.ubuntu.com/9767443/)
عنوان: پاسخ : جدا کردن یک قسمت از متن
ارسال شده توسط: سلمان م. در 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 (https://fa.wikipedia.org/wiki/%D8%B9%D8%A8%D8%A7%D8%B1%D8%AA_%D8%A8%D8%A7%D9%82%D8%A7%D8%B9%D8%AF%D9%87) که به طور خلاصه بهش می‌گن (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 قبل از اون این کار می‌شه
\.
عنوان: پاسخ : جدا کردن یک قسمت از متن
ارسال شده توسط: sajjad93 در 27 دی 1393، 08:36 ب‌ظ
ممنون از پاسخ خوبتون.
من این کار رو کردم از الگوی آخری استفاده کردم هم لینک رو آورد هم یک سری از تگ های html رو علاوه بر لینک تو نتیجه میاره(کل سطر ۷۹۸ رو میاره) چجوری می شه فقط لینک رو تو نتیجه بیاره؟
عنوان: پاسخ : جدا کردن یک قسمت از متن
ارسال شده توسط: Ghost Shadow در 27 دی 1393، 08:58 ب‌ظ
من یه بار واسه mp3 همچین چیزی میخواستم رسیدم به این که به جاش mp4 نوشتم :D
sed -n 's/.*href="\([^"]*\).*/\1/p' index.html | grep ".mp4"تکه اول فقط url ها رو لیست میکنه و دومی هم .mp4 هاش رو جدا میکنه و نشون میده.
عنوان: پاسخ : جدا کردن یک قسمت از متن
ارسال شده توسط: sajjad93 در 27 دی 1393، 09:24 ب‌ظ
من یه بار واسه mp3 همچین چیزی میخواستم رسیدم به این که به جاش mp4 نوشتم :D
sed -n 's/.*href="\([^"]*\).*/\1/p' index.html | grep ".mp4"تکه اول فقط url ها رو لیست میکنه و دومی هم .mp4 هاش رو جدا میکنه و نشون میده.
ممنون کار کرد  :)
عنوان: پاسخ : جدا کردن یک قسمت از متن
ارسال شده توسط: sajjad93 در 27 دی 1393، 10:26 ب‌ظ
من یه بار واسه mp3 همچین چیزی میخواستم رسیدم به این که به جاش mp4 نوشتم :D
sed -n 's/.*href="\([^"]*\).*/\1/p' index.html | grep ".mp4"تکه اول فقط url ها رو لیست میکنه و دومی هم .mp4 هاش رو جدا میکنه و نشون میده.
روی این فایل لینک های pdf رو پیدا میکنه ولی لینک های mp3 با این که وجود دارند پیدا نمیکنه مشکل چیه؟  :o
عنوان: پاسخ : جدا کردن یک قسمت از متن
ارسال شده توسط: Ghost Shadow در 27 دی 1393، 11:21 ب‌ظ
نمیدونم انگار یه کم از لحاظ ساختاری ایراد داره :D
دو تا لینک پشت سر هم هستند. اولی که pdf باشه رو میبینه و وقتی تموم شد باقیش رو اسکیپ میکنه :D
فایل رو درست کردم الان میشه.(اینو باید ببینم چه میشه کرد :P)
عنوان: پاسخ : جدا کردن یک قسمت از متن
ارسال شده توسط: دانیال بهزادی در 28 دی 1393، 10:55 ق‌ظ
یه راه خیلی ساده‌تر:
$ mech-dump --links FILE | grep mp4
عنوان: پاسخ : جدا کردن یک قسمت از متن
ارسال شده توسط: sajjad93 در 28 دی 1393، 06:18 ب‌ظ
نمیدونم انگار یه کم از لحاظ ساختاری ایراد داره :D
دو تا لینک پشت سر هم هستند. اولی که pdf باشه رو میبینه و وقتی تموم شد باقیش رو اسکیپ میکنه :D
فایل رو درست کردم الان میشه.(اینو باید ببینم چه میشه کرد :P)
ممنون  ;)
یکم گشتم اینو پیدا کردم که تا الان خوب جواب داده:  :P
grep -Po '(?<=href=")[^"]*' filename | grep -E '(.mp3|.pdf)'
عنوان: پاسخ : جدا کردن یک قسمت از متن
ارسال شده توسط: sajjad93 در 28 دی 1393، 06:23 ب‌ظ
یه راه خیلی ساده‌تر:
$ mech-dump --links FILE | grep mp4
ممنون.
لینک های mp3 و pdf رو تو فایلی که پست قبلی اتچ کردم پیدا نکرد.( انگار فایلی که اتچ کردم یکم بد قلقه  ;D )
عنوان: پاسخ : جدا کردن یک قسمت از متن
ارسال شده توسط: Ghost Shadow در 28 دی 1393، 06:31 ب‌ظ
یه راه خیلی ساده‌تر:
$ mech-dump --links FILE | grep mp4
ممنون.
لینک های mp3 و pdf رو تو فایلی که پست قبلی اتچ کردم پیدا نکرد.( انگار فایلی که اتچ کردم یکم بد قلقه  ;D )
برای من واسه قایلی که دادی کار کرد. :D
چه جوری زدی؟
عنوان: پاسخ : جدا کردن یک قسمت از متن
ارسال شده توسط: sajjad93 در 28 دی 1393، 06:53 ب‌ظ
یه راه خیلی ساده‌تر:
$ mech-dump --links FILE | grep mp4
ممنون.
لینک های mp3 و pdf رو تو فایلی که پست قبلی اتچ کردم پیدا نکرد.( انگار فایلی که اتچ کردم یکم بد قلقه  ;D )
برای من واسه قایلی که دادی کار کرد. :D
چه جوری زدی؟
درسته کار میکنه!
تو یه فایل دیگه اجرا کردم اون فایل اصلا mp3 نداشت    ;D