قدرت و کارایی عالی خط فرمان در گنو/لینوکس (13)

معرفی چند فرمان جدید که شاید بدردتون بخوره (بدرد من که خوردن!):

echo; declare -i c=0; for i in 30 31 32 33 34 35 36 37 90 91 92 93 94 95 96 97; do for j in 40 41 42 43 44 45 46 47 100 101 102 103 104 105 106 107; do echo -en "\0033[${i}m\0033[${j}m $i-$j \0033[0m "; c=c+1; done; done; echo -e "\n\nCombinations: $c\n";

این فرمان تمام ترکیبات رنگ پیش زمینه و پس زمینه رو برای ترمینال شما نمایش میده. اعداد مربوط به هر رنگ پیش زمینه و پس زمینه در داخل محل نمایش رنگها نوشته میشه. به این روش میتونید ترکیب رنگ مورد علاقه و خوانای خودتون رو به سرعت شناسایی کنید.
توضیح این فرمان برای آشنایی/یادگیری:
- ابتدا با فرمان echo یک خط خالی رد میکنیم.
- یک متغییر (c) از نوع عدد صحیح تعریف کردیم (تا با عبارت ریاضی ساده در خط فرمان بتونیم براحتی مقدارش رو تغییر بدیم) با مقدار اولیهء صفر؛ این متغییر قرار هست تعداد ترکیبهای رنگ رو بشماره.
– دو حلقهء تودرتو داریم که حلقهء خارجی رنگ پیش زمینه رو تعیین میکنه (از شمارهء ۳۰ تا ۳۷ (رنگ نرمال) و از ۹۰ تا ۹۷ (نسخهء روشن)) و حلقهء داخلی رنگ پس زمینه رو (از ۴۰ تا ۴۷ و از ۱۰۰ تا ۱۰۷).
- رنگ مورد نظر رو توسط دستور اکوی داخل حلقهء داخلی تعیین میکنیم (برای اطلاع از فرمت این دستور به مقالهء ویکیپدیا دربارهء ANSI escape code که در پست های قبلی معرفی کردم میتونید مراجعه کنید).
آپشنهای e و n در دستور اکو به ترتیب برای روشن کردن backslash escape که برای فرستادن مقدار اسکی کاراکتر کنترلی ESC (که ۲۷ در مبنای ده و ۳۳ در مبنای هشت میشه) جهت استفاده از ANSI escape code بهش نیاز داریم، و (آپشن n) برای جلوگیری از رد کردن خط توسط هر دستور اکوی جداگانه هستن. چون میخوایم برای هر ترکیب رنگ یک خط جداگانه رد نشه و رنگها در کنار هم نمایش داده بشن.
- پس از هربار اجرای دستور اکو – تکرار حلقهء داخلی – مقدار شمارندهء ترکیب رنگ رو یکی افزایش میدیم.
ضمنا دو shell keyword با نام done هم درواقع هرکدام جزو یک ساختار حلقهء for ما هستن و انتهای این حلقه ها رو مشخص میکنن.
- در پایان با دستور اکو تعداد ترکیبات نمایش داده شده رو چاپ میکنیم. بازهم استفاده از آپشن e بخاطر نیاز به تفسیر n که معادل کاراکتر New line هست میباشد. چون خواستیم قبل از نمایش تعداد ترکیبات دو خط خالی رد کنیم و بعدش هم یکی اضافه تر که با خط خالی ای که خود دستور اکو رد میکنه میشه دوتا. اگر از این آپشن استفاده نمیکردیم احتیاج به استفاده از سه دستور اکوی خالی مجزا داشتیم برای اینکار.

===============================

echo "$(cat target_file | grep 'pattern')" > target_file

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

توضیح چگونگی کارکرد خط فرمان:
محتویات فایل مورد نظر توسط برنامهء cat و از طریق لوله کشی خروجی این برنامه به ورودی برنامهء grep ارسال میشه و این برنامه تنها خطوطی رو که ما مشخص کردیم که حاوی pattern مورد نظر باشن به خروجی میده.
مجموعهء این فیلتر طراحی شدهء ما در یک ساختار شل که جانشین سازی فرمان (Command Substitution) نام داره قرار داره که باعث میشه خروجی این مجموعه در مکان قرارگیریش، یعنی یک آرگومان فرمان echo درج بشه.
خروجی فرمان echo رو هم که مجددا به خود فایل مورد پردازش فرستادیم؛ در نتیجهء محتویات قبلی این فایل با محتویات جدید فیلتر شده جایگزین میشه.
============================

sed -ri 's/(^.*$)/\1\n/g' target_file

بازهم یک فرمان ساده اما کمی سخت برای پیدا کردن! (معما چون حل شود آسان شود!!)
این فرمان مشکل گشا، باعث میشه که بین هر خط یک فایل متن، یک خط خالی اضافه بشه (راه سریعتر و راحتتری از این سراغ دارید؟).
باوجود عمومی نبودن، کاربردش ممکنه بعضی جاها پیش بیاد.
ضمنا حالت کلیش نشون میده که میشه براحتی بعد از خطوطی با هر الگوی مشخص، هرچیزی رو اضافه کرد.

============================

همهء فرمانهای مورد بحث کاربرد عملی داشتن و پاسخ نیاز و مشکلی بودن؛ اما بعلت دراز شدن بیش از حد مطلب، در درج و توضیح خود موارد صرفنظر کردم.

سرعت، قدرت، راحتی! درصورت کاربرد صحیح و ماهرانه و بهینهء خط فرمان، همهء این پارامترها رو خواهید یافت. براحتی درمیابید که چرا هکرها اینقدر خط فرمان رو دوست دارن و چطور خط فرمان برای بسیاری کارها بر رابطهای گرافیکی پیشی میگیره.
فراموش نکنید که خط فرمان در گنو/لینوکس، با وجود برنامه های پیشرفتهء غنی و شل قدرتمند مجهز به زبان مخصوص، عملا یک محیط برنامه نویسی آماده و همیشگی هست که میشه کارهای پیچیده و موارد زیادی با ویژگیهای خاص رو باهاش انجام داد و کارهای ترکیبی و پیچیدهء زیادی رو بصورت خودکار درآورد. بخصوص درصورت تکرار این کارها، مزیت زیادی خواهد داشت.
این محیط محیط برنامه نویسی ای هست که انگار مجهز به کتابخانه های مجهز برای بسیاری کارها هم هست. جز مهمی از این کتابخانه ها همان برنامه های خط فرمان هستند که در گنو/لینوکس بسیار زیاد و قدرتمندند.

رمز تسلط و کسب دانش و مهارت در این محیط، حل هدفمند مسایل از راههای پیشرفته و منعطف خط فرمان هست.
گرچه معمولا ابتدا برای طراحی یک خط فرمان ساده یا ترکیبی، اسکریپت و برنامهء کوچک یا بزرگ شل، وقت و انرژی قابل توجهی صرف میشه و ممکنه بیش از راه دستی و کلیشه ای بدون تفکر و عملکرد روبات وار مثل استفاده از امکانات یک ویرایشگر متن هم باشه، اما در عوض شیرینی حل مسئله برای حرفه ایها رو داره، افزایش مهارت و دانش، سازماندهی ذهنی و افزایش قدرت حل مسئله و برنامه نویسی، آشنایی با محیط و امکانات و ساختار گنو/لینوکس و استفادهء بهینه از سیستم؛ در نهایت هم با یکبار تهیهء یک خط فرمان یا برنامه، برای دفعات بعد میتونید با راحتی و سرعت خیلی بیشتری ازش استفاده کنید. احتمالا خیلی خوبه که جایی ذخیره کنید.

البته اگر تعداد و حجم عملیات قابل توجه باشه، احتمالا حتی در بار اول هم بازدهی زیادی بدست میارید.
اما حتی برای خیلی کارهای کوچکتر هم بهتره از روش اصلی و قابل استفادهء همیشگی استفاده کنید. وگرنه مجبور به تکرار راه غیرهوشمندانه در همون مورد و موارد دیگه، و اتلاف وقت و انرژی و منابع زیادی در مجموع خواهید بود.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>