اگر هنگام کار با دستور Cut در لینوکس به مشکل خوردهاید، لازم است بدانید تنها نیستید. کم پیش نمیآید برنامهنویسان خود را در شرایطی بیابند که نیاز به استخراج بخش کاملا مشخصی از متون و خطوط یک فایل داشته باشند و در این کار به چالش بخورند. خوشبختانه لینوکس فرمانی کاربردی دارد که دقیقا همین اوقات به کار میآید. فرمان Cut لینوکس میتواند بخشهایی از متونی که نیاز دارید را به شکلی دقیق، استخراج کند. بنابراین راجع به ابزاری قدرتمند حرف میزنیم که بهبود قابل توجهی در بهرهوری شما پدید میآورد.
برای مدیریت موثر فایلها روی هاست لینوکس، تسلط بر دستورات خط فرمان مانند cut بسیار مهم است. برای آشنایی بیشتر با هاست لینوکس و محیط آن، پیشنهاد میکنیم مقاله هاست لینوکس چیست را مطالعه کنید.
فرمان Cut در لینوکس دقیقا چه میکند؟
فرمان Cut ابزاری برای پردازش متن است که اجازه میدهد بخشهای مشخصی از هر خط از یک فایل را «برش» (Cut) بزنید یا «استخراج» (Extract) کنید. برای این کار از سینتکس [ cut [ option ] [ text استفاده میشود.
به مثال ساده زیر توجه کنید:
echo 'Hello, World!' | cut -d ',' -f 1
خروجی:
# 'Hello'
در این مثال، از فرمان Cut برای استخراج اولین فیلد (Field) از رشته Hello, World کمک گرفتهایم. گزینه یا آپشن d-، جداکننده یا دیمیلیتر (Delimiter) – که در این مثال علامت , است – را مشخص میکند و آپشن f- هم شماره فیلد را (که در این مثال، اولین فیلد است). سپس فرمان، عبارت «Hello» را به عنوان خروجی نشان میدهد که اولین فیلد از رشته است.
بیشتر بخوانید: اوبونتو چیست؟ بررسی و آموزش انواع، کاربردها و ویژگیهای Ubuntu
این مثال صرفا سادهترین کاربرد فرمان Cut را نشان میدهد و برای اینکه کاملا با قابلیتهای این ابزار آشنا شوید، لازم است بخشهای بعدی را هم بخوانید.
فرمان Cut گرچه ابزاری قدرتمند در جعبه ابزار لینوکس شما به حساب میآید، اما لازم است که محدودیتهایش را نیز بشناسید. برای مثال این فرمان صرفا براساس بایت (Bytes)، کاراکتر (Character) و فیلد برش میزند. به این ترتیب امکان برش زدن براساس الگوهای پیچیده یا عبارات منظم (Regular Expressions) وجود ندارد. برای چنین وظایفی باید از ابزارهای پیشرفتهتر مانند «awk» یا «sed» استفاده کنید که در ادامه راجع به آنها هم حرف میزنیم.
با این حال برای کارهای سادهای مثل استخراج یک ستون از فایل CSV یا فراخوانی فیلدی مشخص در یک فایل لاگ میتوانید روی فرمان Cut به عنوان ابزاری سریع و بهینه حساب باز کنید.
کاربردهای پیشرفتهتر فرمان Cut در لینوکس چیست؟
همینطور که بیشتر با فرمان ساده Cut کار میکنید، بیشتر به پتانسیلهای حقیقی آن برای کاربران حرفهایتر پی میبرید. فرمان Cut انعطافپذیری فراوان دارد و اجازه میدهد وظایف پیشرفتهتر در پردازش متن را به صورت همزمان با فرمانهایی مانند «sort» و «grep» پیش ببرید. اما قبل از اینکه این کاربردهای پیشرفتهتر را بشناسیم، لازم است با برخی از آپشنهایی آشنا شویم که روی رفتار فرمان Cut تاثیر میگذارند.
آپشن | کارکرد | مثال |
-b | استخراج بایتها | cut -b 1,2 file.txt |
-c | استخراج کاراکترها | cut -c 1-3 file.txt |
-d | تعیین دیلیمیتر (جداکننده) | cut -d ‘,’ -f 1 file.txt |
-f | تعیین فیلدها | cut -d ‘,’ -f 1,2 file.txt |
-n | کاراکترهای چند بایتی را تقسیم نمیکند | cut -n -b 1,2 file.txt |
–complement | مجموعه بایتها، کاراکترها یا فیلدهای انتخابشده را تکمیل میکند | cut -d ‘,’ –complement -f 1 file.txt |
–output-delimiter | دیلیمیتر خروجی را تعیین میکند | cut -d ‘,’ –output-delimiter=’;’ -f 1,2 file.txt |
حالا که آپشنهای فرمان Cut را شناختهایم بیایید برخی از سناریوهای کار با این فرمان را بررسی کنیم.
بیشتر بخوانید: آموزش راهنمای تغییر پورت SSH در سرور مجازی لینوکس
استفاده از Cut همراه با sort
از فرمان Cut میشود به صورت همزمان با فرمان Sort کمک گرفت تا خروجی Cut منظم شود. مثال زیر را ببینید:
echo -e '3,apple \n1,banana \n2,cherry' | cut -d ',' -f 2 | sort
خروجی:
# apple # banana # cherry
در این مثال، ابتدا از فرمان Cut برای استخراج دومین فیلد (نام میوهها) از هر خط کمک میگیریم. سپس این خروجی را به فرمان Sort، پایپ (|) میکنیم که در آخر نام میوهها را به ترتیب حروف الفبا نشان میدهد.
استفاده از Cut همراه با grep
برای فیلتر کردن خروجی فرمان Cut هم میشود از آن همراه با فرمان grep استفاده کرد. برای مثال:
echo -e '3,apple \n1,banana \n2,cherry' | cut -d ',' -f 2 | grep 'a'
خروجی:
# apple # banana
در این مثال، ابتدا فرمان Cut را به کار میگیریم تا دومین فیلد (نام میوهها) از هر خط استخراج شود. سپس این خروجی را به فرمان grep پایپ میکنیم که آن هم فقط میوههایی را نشان میدهد که حاوی حرف a باشند.
موارد بالا تنها برخی از مثالهای کاربردهای پیشرفتهتر فرمان Cut در لینوکس است. اگر اندکی خلاقیت نشان دهید و از تمرین دست نکشید، خیلی زود Cut را به ابزاری روزمره برای وظایف پردازش متن خود تبدیل خواهید کرد.
بهترین جایگزینهای Cut چیست؟
اگرچه فرمان Cut ابزاری قدرتمند است، اما فرمانهای دیگری نیز وجود دارند که به شما در رسیدگی به وظایف مشابه کمک میکنند. از برجستهترین جایگزینها میشود به «awk» و «sed» اشاره کرد. این فرمانها حتی از cut هم منعطفتر و قدرتمندتر ظاهر میشود، اما فرایند یادگیری دشوارتری دارند.
استفاده از awk به جای Cut
برای مخاطبان ناآشنا باید گفت awk زبانی برنامهنویسی است که برای پردازش متن طراحی شده. از این زبان میتوان برای رسیدگی به وظایف پیچیده پردازش و تطبیق الگو کمک گرفت. در مثال پایین میبینید چطور میتوان از awk به جای Cut برای رسیدگی به وظیفهای مشابه کمک گرفت:
echo 'Hello, World!' | awk -F ',' '{ print $1 }'
خروجی:
# 'Hello'
در این مثال، از awk برای استخراج نخستین فیلد از رشته «Hello, World!» کمک گرفتهایم. آپشن F- جداکننده فیلد (که در این مثال علامت , است) را تعیین میکند و { print $1 } هم نخستین فیلد را پرینت میگیرد. خروجی فرمان، «Hello» خواهد بود که نخستین فیلد از رشته است.
بیشتر بخوانید: آموزش دستور find در لینوکس برای جستجوی فایل ها
استفاده از sed به جای Cut
از awk که بگذریم، sed را داریم که ادیتوری برای جریان داده متنی است و متون را به شکلی ساده، دگرگون میکند. پیچیدگی این ابزار از Cut بیشتر است، اما قدرت بیشتری هم دارد. در ادامه مثالی از نحوه استفاده از sed به جای فرمان Cut در لینوکس را مشاهده میکنیم:
echo 'Hello, World!' | sed 's/,.*//'
خروجی:
# 'Hello'
در این مثال، از sed برای حذف هرچیزی استفاده کردهایم که بعد از علامت کاما (,) در رشته «Hello World!» قرار گرفته است. فرمان s/,.*// جایگزین کاما میشود و هرچیزی بعد از کاما پاک خواهد شد. این فرمان، خروجی «Hello» را در اختیارمان میگذارد.
گرچه awk و sed قدرتمندتر از Cut ظاهر میشوند، پیچیدگی بیشتری هم دارند. بنابراین اگر نیاز دارید به سادهترین وظایف ممکن رسیدگی کنید، فرمان Cut معمولا انتخاب بهتری خواهد بود. اما برای وظایف پیچیدهتر، خوب است که کار با awk و sed را بیاموزید.
حل مسائل رایج با فرمان Cut
گرچه فرمان Cut در لینوکس میتواند واقعا کارآمد باشد، اما خالی از ایراد نیست. از جمله مشکلات رایجی که ممکن است با آنها روبهرو شوید را همراه با راهکار هر یک در ادامه آوردهایم.
خروجی غیرمنتظره با دیلیمیترها
یکی از پرتکرارترین مشکلات با دستور C زمانی رخ میدهد که دیلیمیتر بیشتر از آنچه انتظارش را دارید در خط ظاهر میشود. فرض میکنیم یک فایل CSV دارید که برخی از فیلدهای آن خالی ماندهاند. این اتفاق نشان میدهد که در برخی خطوط، دو کاما پشت سر یکدیگر قرار گرفتهاند. مثال زیر را ببینید:
echo 'Linux,,Mac' | cut -d ',' -f 2
خروجی:
'#'
در این مثال، انتظار داشتیم دستور Cut، عبارت Mac را بازگرداند، اما رشتهای خالی را برگرداند. دلیل این موضوع، خالی بودن فیلد دوم است. برای جلوگیری از مشکل، لازم است به صورت دقیق فیلدی که مایل به استخراج آن هستید را مشخص کنید.
مشکلات مربوط به کاراکترهای چند بایتی
یک مشکل رایج دیگر، هنگام کار با کاراکترهای چند بایتی رخ میدهد. فرمان Cut میتواند هنگام کار با کاراکترهای چند بایتی – مانند کاراکترهای موجود در فایلهای انکودشده UTF-8 – به مشکل بخورد. برای مثال:
echo 'こんにちは, World!' | cut -b 1-9
خروجی:
# 'こん'
در این مثال، انتظار داشتیم فرمان Cut عبارت «こんにちは» را بازگرداند، اما تنها «こん» را بازگردانده است. این بدان خاطر است که تکتک کاراکترهای این عبارت از نوع چندبایتی هستند و فرمان Cut صرفا بایتها را در نظر میگیرد، نه کاراکترها را. برای جلوگیری از بروز مشکل، میتوانید از آپشن C- کمک بگیرید که به جای بایتها، کاراکترها را میشمارد:
echo 'こんにちは, World!' | cut -c 1-5
خروجی:
# 'こんにちは'
موارد بالا تنها چند مثال از مشکلاتی هستند که هنگام کار با فرمان Cut در لینوکس با آنها روبهرو میشوید. با اندکی تمرین و آزمونوخطا میتوانید بر این چالشها فائق آیید و به شکلی موثر از دستور Cut کمک بگیرید.
کاربردهای گستردهتر دستور Cut
همینطور که بیشتر به کار با فرمان Cut عادت میکنید، متوجه میشوید ابزاری ساده برای وظایف پردازش متن نیست. از این دستور میشود در پروژهها و اسکریپتهای بزرگتر کمک گرفت و با ترکیب کردن آن با دیگر فرمانها، داده را به اشکالی پیچیدهتر پردازش و دستکاری کرد.
ادغام Cut با اسکریپتهای بزرگتر
در اسکریپتهای بزرگتر میشود از فرمان Cut برای استخراج فیلدهای بهخصوص از خروجی دیگر فرمانها کمک گرفت. این ویژگی بهخصوص هنگام کار با اسکریپتهایی کاربردی است که فایلهای لاگ (Log) و دیگر انواع دادههای متنی ساختارمند را پردازش میکنند.
# Example script #!/bin/bash logfile=/var/log/syslog # Get the five most frequent users users=$(cat $logfile | cut -d ' ' -f 1 | sort | uniq -c | sort -nr | head -n 5) ':echo 'The five most frequent users are "echo "$users
در این اسکریپت مثال، از فرمان Cut برای استخراج نخستین فیلد (نامهای کاربری | Usernames) از هر خط از فایل لاگ سیستم استفاده کردهایم. سپس این خروجی را به مجموعهای از فرمانهای دیگر پایپ میکنیم تا فراوانی هر نام کاربری را بسنجیم، آنها را به ترتیب نزولی مرتب کنیم تا ۵ مورد برتر را بشناسیم. اسکریپت سپس ۵ نام کاربری با بیشترین فراوانی را نشان میدهد.
فرمانهای مرتبط به Cut
فرمان Cut معمولا به شکل همزمان با دیگر فرمانهای پردازش متن استفاده میشود. برای مثال فرمانهایی مانند «sort» و «uniq» و «grep» و «awk» معمولا همراه با Cut استفاده میشوند. در صورتی که بر این فرمانها تسلط پیدا کنید، با مهارت و بهرهوری بیشتری به کارهای خود در سیستم عامل لینوکس خواهید رسید.
بیشتر بخوانید: آموزش دستور انتقال فایل در لینوکس
جمعبندی
در این مطلب، نگاهی جامع به فرمان Cut و عملکرد آن در سیستم عامل لینوکس انداختیم. ابتدا سادهترین کاربردها را بررسی کردیم و در ادامه نیز به سراغ کاربردهای پیچیدهتر و حتی برخی از چالشهای رایج کاربران رفتیم. بنابراین زمان آن رسیده که شروع به اندکی آزمونوخطا کنید و کاربردهای مختلف فرمان Cut را برای وظایف روزمره خود بیابید.
سوالات متداولی که شما می پرسید؟
1. دستور Cut در لینوکس چیست؟
فرمان Cut ابزاری برای پردازش متن است که اجازه میدهد بخشهای مشخصی از هر خط از یک فایل را «برش» (Cut) بزنید یا «استخراج» (Extract) کنید. برای این کار از سینتکس [ cut [ option ] [ text استفاده میشود.
2. در لینوکس چگونه می توان بااستفاده از دستورات فایلها را حذف کرد؟
دستور حذف فایل در لینوکس rm است، توجه داشته باشید با به کاربردن این دستور، احتمال دارد فایلهایتان بهصورت همیشگی حذف شوند. همچنین برای حذف دایرکتوری با محتویات داخل آن میتوان از دستور زیر استفاده کرد.
3. جایگزین مناسب دستور Cut در لینوکس چیست؟
از برجستهترین جایگزینها میشود به «awk» و «sed» اشاره کرد. این فرمانها حتی از cut هم منعطفتر و قدرتمندتر ظاهر میشود، اما فرایند یادگیری دشوارتری دارند.
منابع