انجمنهای فارسی اوبونتو
کمک و پشتیبانی => راهنماها، نکات و ترفندها => نویسنده: sajjad93 در 27 دی 1393، 05:37 بظ
-
چجوری با ترمینال میشه تو یه فایل txt یا html یا که توش کلی متن هست چندتا لینک با پسوند مخصوص مثلا pdf یا mp4 و... رو جدا کرد مثلا تو این متن خط ۷۹۸ یه لینک با پسوند .mp4 وجود داره می خوام اون رو جدا کنم و توی ترمینال نمایش بدم:
http://paste.ubuntu.com/9767443/ (http://paste.ubuntu.com/9767443/)
-
به صورت کلی برای اینجور کارها از 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 قبل از اون این کار میشه
\.
-
ممنون از پاسخ خوبتون.
من این کار رو کردم از الگوی آخری استفاده کردم هم لینک رو آورد هم یک سری از تگ های html رو علاوه بر لینک تو نتیجه میاره(کل سطر ۷۹۸ رو میاره) چجوری می شه فقط لینک رو تو نتیجه بیاره؟
-
من یه بار واسه mp3 همچین چیزی میخواستم رسیدم به این که به جاش mp4 نوشتم :D
sed -n 's/.*href="\([^"]*\).*/\1/p' index.html | grep ".mp4"
تکه اول فقط url ها رو لیست میکنه و دومی هم .mp4 هاش رو جدا میکنه و نشون میده.
-
من یه بار واسه mp3 همچین چیزی میخواستم رسیدم به این که به جاش mp4 نوشتم :D
sed -n 's/.*href="\([^"]*\).*/\1/p' index.html | grep ".mp4"
تکه اول فقط url ها رو لیست میکنه و دومی هم .mp4 هاش رو جدا میکنه و نشون میده.
ممنون کار کرد :)
-
من یه بار واسه mp3 همچین چیزی میخواستم رسیدم به این که به جاش mp4 نوشتم :D
sed -n 's/.*href="\([^"]*\).*/\1/p' index.html | grep ".mp4"
تکه اول فقط url ها رو لیست میکنه و دومی هم .mp4 هاش رو جدا میکنه و نشون میده.
روی این فایل لینک های pdf رو پیدا میکنه ولی لینک های mp3 با این که وجود دارند پیدا نمیکنه مشکل چیه؟ :o
-
نمیدونم انگار یه کم از لحاظ ساختاری ایراد داره :D
دو تا لینک پشت سر هم هستند. اولی که pdf باشه رو میبینه و وقتی تموم شد باقیش رو اسکیپ میکنه :D
فایل رو درست کردم الان میشه.(اینو باید ببینم چه میشه کرد :P)
-
یه راه خیلی سادهتر:
$ mech-dump --links FILE | grep mp4
-
نمیدونم انگار یه کم از لحاظ ساختاری ایراد داره :D
دو تا لینک پشت سر هم هستند. اولی که pdf باشه رو میبینه و وقتی تموم شد باقیش رو اسکیپ میکنه :D
فایل رو درست کردم الان میشه.(اینو باید ببینم چه میشه کرد :P)
ممنون ;)
یکم گشتم اینو پیدا کردم که تا الان خوب جواب داده: :P
grep -Po '(?<=href=")[^"]*' filename | grep -E '(.mp3|.pdf)'
-
یه راه خیلی سادهتر:
$ mech-dump --links FILE | grep mp4
ممنون.
لینک های mp3 و pdf رو تو فایلی که پست قبلی اتچ کردم پیدا نکرد.( انگار فایلی که اتچ کردم یکم بد قلقه ;D )
-
یه راه خیلی سادهتر:
$ mech-dump --links FILE | grep mp4
ممنون.
لینک های mp3 و pdf رو تو فایلی که پست قبلی اتچ کردم پیدا نکرد.( انگار فایلی که اتچ کردم یکم بد قلقه ;D )
برای من واسه قایلی که دادی کار کرد. :D
چه جوری زدی؟
-
یه راه خیلی سادهتر:
$ mech-dump --links FILE | grep mp4
ممنون.
لینک های mp3 و pdf رو تو فایلی که پست قبلی اتچ کردم پیدا نکرد.( انگار فایلی که اتچ کردم یکم بد قلقه ;D )
برای من واسه قایلی که دادی کار کرد. :D
چه جوری زدی؟
درسته کار میکنه!
تو یه فایل دیگه اجرا کردم اون فایل اصلا mp3 نداشت ;D