اسکریپت inetfire

سلام، عذر می‌خوام بابت تاخیری در نوشتن پست جدید پیش اومده بود. راستش به حدی درگیر کارها بودم که فرصت نوشتن نداشتم.

دیروز اینترنت قطع شده بود، ساده‌ترین کاری که یک کاربر لینوکس در این حالت انجام می‌ده، استفاده از دستور ping هستش. من هم این دستور رو اجرا کردم و منتظر تغییر در خروجی این دستور بودم که با خودم فکر کردم خب چه کاریه؟ ما این همه شل اسکریپت بلدیم یه چیزی بنویسیم که کاربردی‌تر و جذاب‌تر باشه.

اسکریپت inetfire یک شل اسکریپت (shell script) است که با دریافت یک وقفه‌ی زمانی بر حسب ثانیه به عنوان آرگومان، بررسی می‌کند که امکان دسترسی به اینترنت وجود دارد یا خیر. در صورتی که اینترنت موجود نبود به اندازه‌ی همان وقفه زمانی منتظر می‌ماند و این چرخه را تا زمانی که اینترنت در دسترس قرار گیرد تکرار می‌کند. پس از اینکه اینترنت در دسترس قرار گرفت به کمک ابزار zenity یک پیام هشدار نمایش می‌دهد که اعلان می‌کند اینترنت در دسترس است.

این اسکریپت دو آرگومان اختیاری دیگری نیز (علاوه بر مدت زمان وقفه) می‌پذیرد:

  • تعداد پکت‌ها: معرف تعداد بسته‌هایی است که ابزار پینگ برای بررسی در دسترس بودن اینترنت باید ارسال نماید. تعداد این پکت‌ها نباید از مقدار زمان وقفه بر حسب ثانیه کمتر باشه. چون هر بسته در یک ثانیه ارسال می‌شود. تعداد پکت‌های پیش فرض ۱ عدد است.
  • آدرس IP: معرف آدرس IP نودی است که دسترسی به آن ملاک دسترسی به اینترنت است. به صورت پیش‌فرض آدرس ۴٫۲٫۲٫۴ در نظر گرفته شده است.

ساختار این اسکریپت بسیار ساده‌ است، بخشی که باعث شده من این اسکریپت را در اینجا قرار بدم، سوای مفید بودن خود اسکریپت بخش بررسی صحت پارامتر IP می‌باشد. باید اعتراف کنم من به دلیل کمبود وقت این بخش را از اینجا برداشتم؛ مطمئنم شما با مطالعه‌ی راهنمای regex (اولین پست همین وبلاگ) به راحتی می‌توانید مکانیزم آن را درک کنید و یا regex خودتان را بسازید و جایگزین آن کنید چون این اسکریپت با مجوز GNU GPL v.3 منتشر می‌شود. 🙂

inetfire script, internet notifier script
inetfire, internet notifier script

دوستانی که با شل اسکریپت و نحوه‌ی استفاده از آن آشنایی ندارند، کافی است این فایل را از حالت فشرده خارج کنید و با دستور زیر آن را در سیستم خود نصب کنید:

sudo cp inetfire /usr/bin/

برای استفاده از آن هم کافی است راهنمای آن را فراخوانی کنید:


inetfire --help

بسیار خب. امیدوارم این اسکریپت مفید واقع بشه.

inetfire - internet notifier shell script

"1061" مرتبه دانلود شده

جستجو در متون غیرانگلیسی (فارسی) به کمک regex

این پست در واقع پاسخی به کامنت دوست خوبم آقا حسین هستش؛

جستجوی متون غیرانگلیسی به کمک regluar expression یا عبارات با قاعده امکانپذیر هست. فقط به کمی دقت نیاز دارد. در یک کلام با کمک داشتن کد کاراکتری حروف می‌توانیم هر متنی را در هر زبانی با کمک عبارات باقاعده بررسی کرده و در صورت نیاز تغییر بدهیم.

پیش از هر چیز، باید فرمت متنی نوشته تعیین شود. نوشته‌های فارسی موجود در دنیای دیجیتال عموما به یکی از سه دسته‌ی زیر تعلق دارند:

  • نوشته‌هایی با انکدینگ WINDOWS-ARABIC-1256 (یا به روایتی ISO-8859-6)، وب‌ سایت‌های فارسی اواخر دهه نود و اوایل قرن بیست و یکم از چنین فرمتی برای نمایش متون فارسی استفاده می‌کردند.
  • نوشته‌هایی با فرمت UTF-8 یا (unicode) که بعد از مطرح شدن استاندارد یونیکد بوجود آمدند و در حال حاضر اکثر وب سایت‌های فارسی نوشته‌های خود را در این فرمت ارائه می‌کنند..
  • نوشته‌هایی با فرمت UTF-16 یا (unicode 16) که نسل بعدی استاندارد فوق هستن و زبان‌های بیشتری پشتیبانی می‌کند. من در گوشی موبایلم (p990i) در قسمت مربوط به پیامک (اس.ام.اس سابق)، به این نوع متن برخوردم.

چطور بفهمیم متنی که در اختیار داریم، جزو کدوم دسته است؟

راه ساده‌ای برای این کار وجود دارد؛ کافی است فایل متنی خود را با مرورگر فایرفاکس باز کنید و از منوی View زیر منوی Character encoding و زیر منوی More Encodings انکدینگ‌ها را تست کنید. هر زمان که متن به درستی نمایش داده شد، انکدینگ مناسب را یافته‌اید.

firefox encoding screenshot
firefox encoding

پس از شناسایی انکدینگ مناسب، می‌بایست جدول کاراکتری مربوط به آن انکدینگ را پیدا کنید. برای اینکار می‌توانید از گوگل کمک بگیرید (جدول نمونه انکدینگ‌های فوق در پانویس۲ آمده است)

حالا بعنوان مثال فرض کنید متنی با انکدینگ UTF-8 داریم که حاوی کلماتی مثل انشاء، املاء و اشیاء و مانند اینهاست و می‌خواهیم همه‌ی این همزه‌های عربی را از انتهای این کلمات (یا هر جای دیگری که باشند) پاک کنیم تا موجبات خشنودی فرهنگستان زبان فارسی فراهم شود.

برای UTF-8، این لینک همه کاراکترها را به همراه کد هگزادسیمال نمایش می‌دهد.با مراجعه به جدول کاراکتر‌ی در این لینک و انتخاب گزینه‌ی Arabic از کادر وسط صفحه، متوجه می‌شویم در ردیف کاراکتر همزه چنین آمده:

ARABIC LETTER HAMZA d8 a1 ء U+0621

قسمت‌هایی که برای کار ما اهمیت دارد دو ستون وسط است و به خصوص ستونی که در آن نوشته شده d8 a1 این کد هگزادسیمال کاراکتر همزه است. حالا کافی است به کمک regex و یک ابزار مناسب، این کاراکتر را در متن یافته و آن را حذف نماییم. برای اجرای این عملیات من از ابزار sed کمک می‌گیرم:

sed -e "s/\xd8\xa1//g" old-text.txt > updated-text.txt

ذکر این نکته ضروری است که استاندارد UTF-8 از دو بایت فضا برای نمایش کاراکتر‌ها استفاده می‌کند در حالیکه استاندارد اسکی (بخوانید: ASCII) از یک بایت فضا برای ذخیره کاراکترها کمک می‌گیرد. درست به همین دلیل است که در اینجا از دو نشان x\ کمک گرفتیم که هر یک بخشی از کد هگزادسیمال کاراکتر همزه را اعلان می‌کنند.

نکته‌ای که در اینجا لازم می‌دانم مطرح کنم این موضوع است که در مثال‌های جایگزینی می‌توانید با خیال راحت کاراکتر‌ها را بنویسید چرا که در خروجی به همان ترتیبی که شما ذکر کردید نمایش داده خواهند شد.

اجازه بدهید با یک مثال این موضوع را بررسی کنیم، فرض کنید در متنی می‌خواهم کلمه‌ی «رضا» را با «رضا جان»جایگزین کنم. با دستور sed چنین خواهم نوشت:

sed -e "s/\xd8\xb1\xd8\xb6\xd8\xa7/\xd8\xb1\xd8\xb6\xd8\xa7 \xd8\xac\xd8\xa7\xd7\x86/g" reza.txt > reza-jan.txt

با دیدن این مثال‌ها، بیش از پیش از وجود ادیتور‌های امروزی سپاسگزار می‌شویم! ولی این فقط یک مثال ساده بود، سناریو‌های پیچیده‌تری می‌توانند وجود داشته باشند که ما را دست به دامان همین ابزارهای قدیمی و پرقدرت می‌کند.

این مثال‌ها همگی در انکدینگ UTF-8 بوده است ولی در استفاده از این الگو محدودیتی وجود ندارد. می‌توانید این کارکرد با اندکینگ‌های دیگر نیز تست کنید. (البته من تست نکردم ولی منطق امر می‌گوید می‌بایست به همین خوبی جواب بدهد)

پانویس ۱-  خواندن کد‌هایی که باید در ترمینال اجرا شوند، آسان نیست. من به یک syntax highlighter مناسب برای وردپرس احتیاج دارم ولی متاسفانه هنوز موفق نشدم گزینه‌ی مناسبی برای این کار پیدا کنم. 🙁

پانویس۲ – بعضی از این لینک‌ها مرجع این مقاله بوده‌اند و بعضی دیگر در رابطه با این مقاله هستند که دیدنشان خالی از لطف نیست.

http://www.regular-expressions.info/unicode8bit.html

http://www.utf8-chartable.de/unicode-utf8-table.pl?start=1536, UTF-8 character tables

http://en.wikipedia.org/wiki/ISO/IEC_8859-6, WINDOWS-ARABIC-1265 character table

http://www.unicode.org/charts/, UTF-16 character tables

آموزش سریع عبارت‌های باقاعده (regular expression)

روزی دوست خوبم آقای نبی کرمعلی زاده سناریویی مطرح کرد که لازم بود دو خط از یک فایل متنی با یک الگوی خاص تطبیق داده می‌شد. در نگاه اول مشخص بود که باید از ابزار sed، پرل یا awk استفاده کرد ولی در واقع همه‌ی این ابزارها با کمک یک موجودیت قادر به انجام دادن کار بودند: regular expression

پس از کمی جستجو در اینترنت متوجه شدم که هیچ راهنمای فارسی برای regular expression (که من فارسی آن را «عبارت‌ باقاعده» ترجمه کردم) وجود ندارد*. پس تصمیم گرفتم آنچه یاد می‌گیرم برای کمک به مخاطبانی که ممکن است به آن نیاز پیدا کنند بنویسم. مقاله‌ای که در اینجا عرضه می‌شود، حاصل این تلاش من است. لطفا در صورتیکه در مطالعه‌ی این مقاله به اشکال یا ایرادی نگارشی یا غلط تایپی برخورد کردید، به من اطلاع دهید تا ضمن اضافه شدن اسمتان در بخش مشارکت‌کنندگان به بهبود این اثر کمکی شده باشد.

*- البته بعد از خاتمه‌ی نگارش این مقاله متوجه شدم که کتابی در این زمینه قبلا نوشته شده است.

————————————

نسخه‌ی ۱.۱ این راهنما پس از ویرایش نسخه‌ی ۱.۰ برای دانلود آماده است؛

حجم: ۱۹۵.۷ کیلوبایت

quick regular expression guide Persian (farsi) language

"29655" مرتبه دانلود شده