انجمنهای فارسی اوبونتو
جامعه کاربران => کافه اوبونتو => نویسنده: mohenmir در 25 اردیبهشت 1391، 12:14 قظ
-
با سلام و درود
من یه سوال خیلی مهم داشتم که به جوابش فوری احتیاج دارم و از دوستان تمنا دارم تا آخر همکاری کنند تا یه اسکریپت خوبی رو باهم بسازیم
اسکریپتی که مد نظر من هست اینه که وقتی یه فایل متنی که داخل اون یسری اطلاعات داخلش هست رو بگیره و تمامی آدرس های ایمیل و وب رو ازش جدا کنه برای اینکار از سرویس ترمینال استفاده میکنیم و با دستور زیر یه فایلی رو ایجاد میکنیم و داخلش رو باید اطلاعاتی رو قرار بدیم که این کار رو انجام بده
gvim MyScripit
داخل اون یکسری دستورات باید قرار بگیره که بتونه ساختار Mail و Web رو تشخیص بده که بنظر من میتونیم از regular expression استفاده کنیم
ساختار میل
[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})
ساختار وب
(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?
نکته : برای تست این ساختار میتونیم از نرم افزار تحت ویندوز RegexBuddy هم استفاده کنید
حالا این فایل رو چطور باید ویرایش بشه که بتونه همچین کاری رو انجام داد
و در آخراینکه فایل نوشته شد و از اون خارج شدیم برای اجراش باید به فورمت اجرایی تبدیل بشه برای اینکار از دستور زیر استفاده میکنیم
Chmod +x MyScript
و با دستور زیر اسکریپت رو اجرا کنیم
./MyScript
دوستان لطف کنند کمک کنند با هم اینو راه بندازیم منم سعی میکنم هرچیزی درابطه با این موضوع میدونم و بدرد میخوره بگم بلکه یه آموزش هم در این مورد داده بشه و مشکل من هم حل بشه
با تشکر
-
کسی نیست که یه کمکی بمن بکنه من خیلی احتیاج دارم :(
-
grep -o -e 'REGEX INJA' < FILE.TXT
-
خیلی از شما ممنونم میتونید کمکم کنید و بهم بگید این اسکریپتی که به یه فایل اجرایی تبدیل کردم چطوری میشه اونو Make کرد یعنی طوری درست کرد تبدیل به یه فایل نصب تبدیل بشه و با اجراش هم فایل اصلی هم فایل مربوط به man اون داخل پوشه اصلیش ریخته بشه
-
این برنامه چیز ویژه ای نداره
شما همینو کپی کن توی /usr/bin/ دسترسی هم 755 بده . راهنما ها رو نمیدونم کجا باید کپی کنید .
make برای برنامه هایی هست که باید کامپایل هم بشن یعنی از روی منبع دونه دونه کامپایل کنن و سرهم بندی انجام بشه . برای همچه اسکریپت ساده ای نیاز نیست
-
راهنمایی هم که نوشتید رو در :
/usr/share/doc
کپی کنید ؛ وقتی کاربر از دستور:
man <command>
استفاده کنه میگرده تو اون فولدر و راهنما رو نشون میده ;)
-
یه دنیا ممنون از شما دوستان
ولی بنا به سفارش استادمون باید اینو بصورت Make در بیارم تا چگونکی ساختش رو یاد بگیرم بعد استادمون یه پرژه بزرگی رو در اختیارمون بزاره و این روند رو انجام بدم
اگه نحوه ساخش رو توضیح بدین یه دنیا دیگه ممنون میشم
-
اگر منظورتون اینه که برنامه ای باشه که نصاب داشته باشه؛ راه ساده تری نسبت به Make هست و اونم ساخت بسته دب هست ؛ Make هم برای یک شل اسکریپت ساده به کار نمیبرند معمولا ولی نمیدونم چرا از شما چنین چیزی خواسته شده!
-
ببخشیدا! استادت یه کم پرته از مرحله :D میتونی makefile دستی بنویسی براش که ایندوتا پرونده رو کپی کنه
-
یه دنیا ممنون از شما دوستان
ولی بنا به سفارش استادمون باید اینو بصورت Make در بیارم تا چگونکی ساختش رو یاد بگیرم بعد استادمون یه پرژه بزرگی رو در اختیارمون بزاره و این روند رو انجام بدم
اگه نحوه ساخش رو توضیح بدین یه دنیا دیگه ممنون میشم
شما فولدر usr و محتویاتش رو درست کن ؛ هرچیزی که میخوای هرجا کپی بشه (یادت باشه الان به شکل زیر فولدر نیاز داری):
usr/bin ; usr/share/doc
خب اسکریپت و ... که نوشتی رو توی این فولدرهای دستی قرار بده ؛ بعد کنارش یک فایل درست کن به اسم makefile و این کد رو درونش بزار:
sudo cp -R usr /usr /
تا کپی بشه!
-
grep -o -e 'REGEX INJA' < FILE.TXT
با سلام و درود
اسکریپتی رو ساختم و درونش رو با کد زیر پر کردم
#!/bin/sh
cat $1 | tr ' ' '\n' | grep -E -o '[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})'
و با دستور زیر اسکریپت اجرا میشه
./myscript test
تا اینجا مشکلی نداشتم اما حالا میخوام علاوه بر ایمیل ها ، وب آدرس ها رو هم نشون بده ولی با اضافه کردن کد زیر دیگه کار نمیکنه
#!/bin/sh
cat $1 | tr ' ' '\n' | grep -E -o '[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})' | grep -E -o '(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?'
لطفا کمکم کنید بتونم این مشکل هم رفع کنم
-
از مغزت استفاده کن ببین چکار کردی .
نکته :
نشانک | رو بهش میگن لوله کشی . برون ده فرمان چپ رو به عنوان ورودی فرمان سمت راست لوله کشی میکنه . حالا ببین به اخرین فرمان grep چی رو به عنوان ورودی دادی
-
نشانک | رو بهش میگن لوله کشی . برون ده فرمان چپ رو به عنوان ورودی فرمان سمت راست لوله کشی میکنه . حالا ببین به اخرین فرمان grep چی رو به عنوان ورودی دادی
درست میگید حق با شماست شرمنده من حالا وب آدرس رو جداگانه نوشتم چون ایمیل آدرس کار میکرد و هرچی اینو دستکاری میکنم بازم کار نمیکنه ولی در حالی که با RegexBuddy کار میکنه حسابی گیج شدم لطفا راهنماییم کنید
#!/bin/sh
cat $1 | tr ' ' '\n' | grep -E -o '(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?'
-
از مغزت استفاده کن ببین چکار کردی .
نکته :
نشانک | رو بهش میگن لوله کشی . برون ده فرمان چپ رو به عنوان ورودی فرمان سمت راست لوله کشی میکنه . حالا ببین به اخرین فرمان grep چی رو به عنوان ورودی دادی
قبلنا اسمش پایپ بود
-
از مغزت استفاده کن ببین چکار کردی .
نکته :
نشانک | رو بهش میگن لوله کشی . برون ده فرمان چپ رو به عنوان ورودی فرمان سمت راست لوله کشی میکنه . حالا ببین به اخرین فرمان grep چی رو به عنوان ورودی دادی
قبلنا اسمش پایپ بود
ایشون ترجمه کرده ولی فکر نکنم سازمانی و رسمی باشه اینگونه ترجمه :)
-
نشانک | رو بهش میگن لوله کشی . برون ده فرمان چپ رو به عنوان ورودی فرمان سمت راست لوله کشی میکنه . حالا ببین به اخرین فرمان grep چی رو به عنوان ورودی دادی
درست میگید حق با شماست شرمنده من حالا وب آدرس رو جداگانه نوشتم چون ایمیل آدرس کار میکرد و هرچی اینو دستکاری میکنم بازم کار نمیکنه ولی در حالی که با RegexBuddy کار میکنه حسابی گیج شدم لطفا راهنماییم کنید
#!/bin/sh
cat $1 | tr ' ' '\n' | grep -E -o '(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?'
با سلام و درود
لطفا کمکم کنید وقت زیادی برام باقی نمونده فقط باید وب آدرس رو درست کنم
فایل اسکریپت رو ایجاد کردم و اونو داخل پوشه usr/bin ریختم و فایل man رو توی مسیر usr/share/man/man1 ریختم و تست هم کردم که درست کار کرد فقط مشکل من اینجا نمایش وب آدرس ها بهمراه ایمیل هست لطفا کمکم کنید
یه دنیا ممنون
-
خوب یک بار نشانی های وب را بگیرید
یکبار هم نشانی های رایانامه ( ایمیل ) را
یک نمونه از پرونده که رویش کار میکنید به پیوست بگذارید
-
یک نمونه از پرونده که رویش کار میکنید به پیوست بگذارید
با سلام و درود
این فایل اسکریپتی هست که من ساختم
http://s3.picofile.com/file/7384147204/myscript.html
-
یک نمونه هم از فایل ورودی بگذار . فایلی که میخواد خوانده و پرداخته بشه
-
یک نمونه هم از فایل ورودی بگذار . فایلی که میخواد خوانده و پرداخته بشه
با سلام و درود
این کل پروژه من هست که داشتم بگفته آقای prp-e بصورت Make ایجاد میکردم که موفق نشدم
http://s3.picofile.com/file/7384163545/mmst_tar.gz.html
-
الگوی یافتن نشانی های وب :
^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\/\\\+&%\$#\=~])*$
نمونه اسکریپت :
#!/bin/sh
echo "E-MAIL addresses in $1 : " ;
cat $1 | tr ' ' '\n' | grep -o -E '[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})' ;
echo "HTTP addresses in $1 : " ;
cat $1 | tr ' ' '\n' | grep -o -E '^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\/\\\+&%\$#\=~])*$' ;
exit 0 ;
نمونه پرونده آزمایش :
http://www.goohjkgle.com
doomhammer65hjkjhir@gmail.com
https://fihjkhikleserve.net
abbasi65ir@yhjkjhkahoo.com
نمونه آزمایش :
E-MAIL addresses in testfile :
doomhammer65hjkjhir@gmail.com
abbasi65ir@yhjkjhkahoo.com
HTTP addresses in testfile :
http://www.goohjkgle.com
https://fihjkhikleserve.net
-
با سلام و درود
اول از همه تشکر فراوان از دوستان مخصوصا آقای doomhammer65ir که خیلی کمک کردن و تقریبا تا 90 درصد تکمیل شد
اما یه قسمت هایی از کد هست خوب کار نمیکنه مثلا من یه فایل متنی دارم که اطلاعات زیر رو داخلش دارم
Amir.rezaii@gmail.com
http://www.google.com http://www.yahoo.com
http://www.google.
http://www
پس از اجرای اسکریپت چیزی که برای من پیدا می کنه به اینصورته
E-MAIL addresses in input_test :
min.solhizadeh@gmail.com
HTTP addresses in input_test :
http://www.google.com
http://www.yahoo.com
http://www.google.
برای ایمیل که مشکلش با اضافه کردن حروف بزرگ به دستور یا استفاده از آپشن -i مشکلش حل میشه
cat $1 | tr ' ' '\n' | grep -o -i -E '[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})' ;
و برای وب آدرس هم با تغییر کد به شکل زیر اون مشکلاتش هم حل میشه
cat $1 | tr ' ' '\n' | grep -o -i -E '^(http|https)://[a-zA-Z0-9\-_]+(\.[a-zA-Z0-9\-_]+)+([a-zA-Z0-9\-\.,@?^=%&:/~\+#]*[a-zA-Z0-9\-\@?^=%&/~\+#])?$' ;
که در نهایت بشکل زیر در میاد
E-MAIL addresses in input_test :
Amir.rezaii@gmail.com
HTTP addresses in input_test :
http://www.google.com
http://www.yahoo.com
-
خوب با سلام و درودی دوباره
روش ایجاد فایل make رو می خوام براتون در چند خط بزارم
ما الان کلا 2 فایل اصلی داریم یکی کخ خود اسکریپت رو داخلش نوشتیم و دیگری هم man برنامه هست هر دو رو با هم کپی میکنیم و تو یه پوشه که جدید ایجاد میکنیم میریزیم اسمش اصلا مهم نیست حالا یه فایل متنی دیگه ایجاد میکنیم به اسم makefile و داخلش رو با کد زیر پر میکنیم
copy:mscript mmst.1.gz
sudo cp mscript /bin
sudo cp mmst.1.gz /usr/share/man/man1
بعد فقط با زدن دستور make فایل ها شروع به کپی شدن میکنند
موفق باشید
-
با سلام و درود
یه سوال برام پیش امده و از دوستان خواهش دارم که اگه می تونند ، کمکم کنند
در مورد کد زیر cat $1 | tr ' ' '\n' | grep -o -i -E '^(http|https)://[a-zA-Z0-9\-_]+(\.[a-zA-Z0-9\-_]+)+([a-zA-Z0-9\-\.,@?^=%&:/~\+#]*[a-zA-Z0-9\-\@?^=%&/~\+#])?$' ;
این کد طوری باید باشه که مثلا داده های ما درود فایل test به اینصورت هست
<a href="http://google.com">google</a>
حالا با استفاده از ساختار SED بیاد تگ a رو پیدا کند در خط بعدی بیاد از تگ a قسمت heref رو و در نهایت آدرس وب رو جدا کنه و بزاره
من یه چیزهایی در مورد SED فهمیدم ولی هرچی تلاشم کنم نتیجه نمیگیرم اگه راهنماییم کنید بتونم ایم موضوع رو پیاده کنم خیلی ممنون میشم
-
میخواهید تارتن ( عنکبوت ) بسازید سورس برگه ها را پیمایش کند نشانی های ایمیل را در بیاورد ؟
اگر این را میخواهید کار خوبی نیست . آن اصطلاح مزخرف ایمیل مارکتینگ هم بهتر است بگوییم ایمیل مزاحمینگ
================
اگر برای کار دیگری میخواهید :
<a href="http://google.com">google</a>
میخواهید http://google.com را بیرون بکشید ؟
-
میخواهید تارتن ( عنکبوت ) بسازید سورس برگه ها را پیمایش کند نشانی های ایمیل را در بیاورد ؟
اگر این را میخواهید کار خوبی نیست . آن اصطلاح مزخرف ایمیل مارکتینگ هم بهتر است بگوییم ایمیل مزاحمینگ
================
اگر برای کار دیگری میخواهید :
<a href="http://google.com">google</a>
میخواهید http://google.com را بیرون بکشید ؟
با سلام و درود
هدف فقط شناخت و یادگیری از ساختار sed و استفاده اون در برنامه های بعدی هست که در اینجا من می خوام فقط Web Adress ها رو توی سه مرحله استخراج کنه که 2 مرحل با Sed و یه مرحله grep
در مرحله اول با sed تگ a رو شناسایی کنه ولی چیزی نشون نده مثلا
<a href="http://google.com">google</a>
در مرحله دوم با sed با کمک مرحله اول قسمت مربوط به href رو ، مثلا
href="http://google.com"
و در مرحله آخر با grep و با استفاده از مرحله دوم وب آدرس رو نشون بده، مثلا
http://google.com
-
الگوی زیر را در هر خط بیابید :
<a ....>...</a>
/<a.*?<\/a>/
برای آسانی کار از grep بهره برید :
cat FOLAN | grep -o -P '<a.*?</a>'
سپس برون ده را برای الگوی زیر بپیمایید :
/".*?"/
-
با سلام و درود
شرمنده بخاطر مشکلی که پیش امد مجبور به سفر اجباری شدم
برای آسانی کار از grep بهره برید :
cat FOLAN | grep -o -P '<a.*?</a>'
در مورد پیدا کردن تگ a و فرمان href باید در دو مرحله یا حداقل یک مرحله از دستور sed استفاده کنیم و grep رو برای زمانی که بخوایم لینک رو خارج کنیم استفاده کنیم
-
http://www.linuxquestions.org/questions/programming-9/printing-pattern-match-and-not-whole-line-that-matches-pattern-299122/
-
با سلام و درود و تشکر فراوان
کدی که تونستم در بیارم به این شکل شد
cat $1 | grep -o -i -P '<a.*?</a>' | sed 's/.*HREF="\(.*\)".*/\1/' | grep -o -i -E '^(http|https)://[a-zA-Z0-9\-_]+(\.[a-zA-Z0-9\-_]+)+([a-zA-Z0-9\-\.,@?^=%&:/~\+#]*[a-zA-Z0-9\-\@?^=%&/~\+#])?$' ;
فایل ورودی
<a HREF="http://www.mohsen.ir">xdpyinfo(0)</a>
<a HREF="/mohsen.ac.com">xdpyinfo(1)</a>
<a HREF="http://mohsen.com">xdpyinfo(2)</a>
<a HREF="www./mohsen.org">xdpyinfo(3)</a>
فایل خروجی
HTTP addresses in input_test :
http://www.mohsen.ir
http://mohsen.com
اگه میشد کد زیر رو هم بوسیله sed بدستش آورد خیلی عالی میشد
grep -o -i -P '<a.*?</a>'
و 2 تا سوال آپشن P- تو grep و آپشن 1\ تو sed چیکار میکنه؟
ممنون میشم پاسخ بدین
-
sed ویژه ی ویراستن نوشتارهاست نه چاپ همه یا بخشی از یک خط . برای چاپ از grep سود برید .
=======================================
grep -o -i -P '<a.*?</a>'
از روی الگوی زیر خودتان بسازید :
sed 's/.*HREF="\(.*\)".*/\1/'
این کد تنها بخشی که میان دو " باشد را چاپ میکند . حالا میخواهیم تنها بخشی از خط که میان
<a ... </a>
است را چاپ کنیم . چه باید بنویسیم ؟؟
================================
و 2 تا سوال آپشن P- تو grep و آپشن 1\ تو sed چیکار میکنه؟
P = perl compatible
\1 = یعنی تنها بخشی که درون دو کمانک ( پرانتز ) است را چاپ کن و نه همه ی خط را .
===============================
اگر وقت کردم پیش در آمدی بر رجکس و sed و grep خواهم نوشت این شا ال لاه
-
اگه میشه سریع تر بنویسید ! :) خیلی باحال بود \\:D/
یا این که یه منبعی معرفی بکنیدکه مابریم یاد بگیریم !