جادوی ترمینال: ویرایش فایل و رشته‌ها در محیط کنسول

آفلاین
user-avatar
ارسطو عباسی
13 خرداد 1398, خواندن در 5 دقیقه

به عنوان یک توسعه‌دهنده کارهای بسیار زیادی وجود دارد که ما در طول روز به صورت تکراری انجام می‌دهیم و باید بگویم که این کارها زمان بسیار زیادی را از ما می‌گیرند. پیدا کردن راهی برای خودکارسازی و بهینه‌سازی چنین پروسه‌هایی مطمئنا به ما کمک بسیار زیادی می‌کند.

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

می‌توانیم خودمان برنامه منحصر به فردی را برای چنین کارهایی بنویسیم اما چرا باید دوباره چرخ را اختراع کنیم؟ می‌توانیم با کار کردن روی یکسری دستورات در محیط ترمینال تمام ایده‌های‌مان را پیاده‌سازی بکنیم.

خب بدون زیاده‌روی در مقدمه نویسی بیایید سراغ کدنویسی‌مان برویم.

دستور echo: نوشتن یک متن در کنسول

قبل از اینکه وارد دستورات منحصر به فرد کار با متون در محیط ترمینال برویم بیایید سعی کنیم یک متن ساده را در این محیط نشان دهیم. برای این کار به سادگی زیر می‌توانید عمل کنید:

echo “hello world!”

این کار خروجی زیر را به شما در محیط ترمینال نشان می‌دهد:

hello world!

شاید به نظر دستور بدردنخوری برسد اما اینگونه نیست! در آینده کاربرد آن را خواهیم دید.

دستور cat: نمایش محتویات یک فایل

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

برای مثال فرض کنید در داخل فایل file1.txt متن This is a file قرار دارد. بنابراین وقتی دستور زیر را اجرا بکنید:

cat file1.txt

با خروجی زیر روبرو خواهید شد:

This is a file

می‌توانیم برای نمایش محتوای تمام فایل‌های txt موجود در یک دایرکتوری از کاراکتر * استفاده بکنیم. برای مثال:

cat *.txt

دستور grep: پیدا کردن یک رشته در یک فایل

با استفاده از این دستور می‌توانید یک سوزن را در یک انبار کاه پیدا کنید. کار با grep بسیار ساده است. تنها کافی‌ست بعد از دستور رشته مورد نظر و بعد از آن فایل مورد نظر را وارد کنید. ساختار این دستور به صورت زیر است:

grep <some string> filename

خروجی این دستور تمام خطوطی خواهد بود که عبارت <some string> در آن قرار گرفته است.

این دستور به بزرگ و کوچک بودن متون حساس است، اگر می‌خواهید این حساسیت را غیر فعال کنید می‌توانید آرگومان –i را وارد نمایید. 

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

grep “this” *.txt

خروجی در صورت وجود دو فایل .txt به صورت زیر خواهد بود:

file1.txt: this is a file
tile2.txt: this is a file

دستور sed: تغییر یک قسمت از رشته

دستور sed می‌تواند محتوای مربوط به یک فایل را تغییر دهد. برای مثال شما در یک فایل اگر قصد داشته باشید که یک متن یا یک بخش از متن را به چیز دیگری تبدیل کنید می‌توانید از این دستور استفاده نمایید. 

برای مثال تصور کنید که فایل file1.txt حاوی متن زیر است:

This is a sample text

حال اگر دستور زیر را روی آن اجرا کنید:

sed s/sample/simple/ file1.txt

خروجی زیر برای شما برگشت داده می‌شود:

This is a simple text

در واقع sed اولین sample داخل متن را پیدا کرده و آن را با simple جایگزین می‌کند. اگر متن file1.txt برابر مقدار زیر بود خروجی به شکلی می‌شد؟

This is a sample sample text

اپراتورها

اپراتورها به ما این قابلیت را می‌دهند که بتوانیم بهتر از دستورات مختلف و ترکیبات آن‌ها استفاده کنیم. در این مطلب قصد دارم به شما سه نمونه از این اپراتورها را نشان دهم.

اپراتور Pipe

با استفاده از این اپراتور شما می‌توانید دو دستور را به صورت ترتیبی با همدیگر استفاده بکنید. برای مثال تصور بکنید که ما قصد داریم محتوای یکسری از فایل‌ها را مطالعه کنیم و روی تمام آن‌ها عملیات grep را انجام دهیم. به دستور زیر دقت کنید:

cat *.txt | grep “is”

این دستور ابتدا cat را اجرا می‌کند و محتوای تمام فایل‌های .txt را مشاهده می‌کند، سپس grep را برای پیدا کردن is روی آن‌ها اعمال می‌دارد. 

کاراکتر | بیانگر استفاده از اپراتور pipe در این مثال است. 

اپراتور write

با استفاده از این اپراتور می‌توانید خروجی یک دستور را در یک فایل دیگر قرار دهید. برای مثال تصور کنید که قصد داریم مقدار یک دستور echo را در یک فایل با نام file1.txt قرار دهیم. برای انجام این کار می‌توانید به آسانی نیز عمل کنید:

echo “this is a file” > file1.txt

و یا اینکه می‌توان در یک مثال عملی‌تر به خروجی دستور sed برگردیم:

sed s/sample/simple/ file1.txt

می‌توانیم خروجی حاصل از این دستور را در یک فایل با نام file2.txt قرار دهید:

sed s/sample/simple/ file1.txt > file2.txt

اپراتور append

این اپراتور نیز مانند write خروجی را به داخل یک فایل می‌فرستد اما یک تفاوت وجود دارد و آن این است که تمام فایل را overwrite نمی‌کند، بلکه به انتهای فایل اضافه می‌کند.

شیوه استفاده از این دستور درست شبیه به اپراتور write است و هیچ پیچدگی در آن وجود ندارد. برای استفاده از این اپراتور باید از << استفاده بکنید:

sed s/is/ere/ file1.txt >> file2.txt

در پایان

کار کردن با این دستورات در بسیاری از مواقع می‌تواند کارایی شما را بالا برده و به شما کمک بسیار زیادی برای تسریع در روند پروژه‌های‌تان بدهد. 

منبع

چه امتیازی به این مقاله می دید؟
خیلی بد
بد
متوسط
خوب
عالی

دیدگاه‌ها و پرسش‌ها

برای ارسال دیدگاه لازم است، ابتدا وارد سایت شوید.

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

آفلاین
user-avatar
ارسطو عباسی @arastoo
برنامه‌نویس و مدیر بخش تولید محتوا وبسایت راکت - وبلاگ شخصی: https://arastoo.dev
دنبال کردن

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

بخشی برای حل مشکلات برنامه‌نویسی و مباحث پیرامون آن وارد شو